저는 현재 Linux를 배우고 있는데 일부 실습으로 인해 완전히 당황했습니다. 현재 디렉터리에서 특정 텍스트가 포함된 파일을 찾아 해당 파일의 inode 번호를 출력하려고 합니다. 나는 이 모든 것을 개별적으로 자신있게 할 수 있지만, 하나로 합치려고 하면 무너집니다.
find. -maxdepth 1 -type f | grep -r "#include" -ls -i
그런데 무슨 이유에서인지 파일 이름만 출력되나요?
어떤 아이디어가 있나요?
답변1
find . -type f -exec grep '#include' {} \; -printf '%p %i\n'
또는 grep -q grep 출력 숨기기
find . -type f -exec grep -q '#include' {} \; -printf '%p %i\n'
답변2
grep
재귀 모드에서 사용하는 경우 실제로는 다음 명령이 -r
필요하지 않습니다 .find
grep+매개변수방법:
grep -rl '#include' | xargs -I {} ls -i '{}'
대략적인 출력( <inode> <filename>
):
1837827 test/1.pdb
1712970 2_clean.pdb
1837846 test2/2.pdb
1712965 1_clean.pdb
답변3
검색은 현재 디렉터리로 제한되므로 도트 파일에 관심이 없다면 더 쉬운 방법을 사용하여 이 작업을 수행할 수 있습니다 grep -l
.명령 대체및 와일드카드( *
):
ls -i $(grep -ls '#include' *)
산출:
109057734 file1.txt 109056004 file2.txt 5505834 file3.txt
또는 이전 구문을 사용하고 대신 백틱을 사용하세요 $()
.
ls -i `grep -ls '#include' *`
-s
다음 옵션 을 추가했습니다.grepgrep 디렉토리에 대한 일부 경고를 제거합니다.
멋진 열을 원한다면 -1
옵션을 추가하세요엘에스.
ls -i1 $(grep -ls '#include' *)
산출:
109057734 file1.txt
109056004 file2.txt
5505834 file3.txt