찾다. * -exec ll {} \ -> 4개가 아닌 단 1개의 결과

찾다. * -exec ll {} \ -> 4개가 아닌 단 1개의 결과

find 명령을 사용하여 디렉토리의 모든 파일을 검색하고 싶습니다.

find . * -exec ll {} \;

결과에는 파일당 4개의(!) 결과가 표시됩니다.

  • file123
  • ./test/file123
  • file123
  • test/file123

두 번째 결과만 표시하기 위해 find-out-of-the-box-command를 사용할 수 있습니까 ./test/file123(따라서 그런 것을 사용하지 않음 | grep '^\./')?

저는 최신 버전의 HP/UX를 사용하고 있습니다.

답변1

find . * -exec ll {} \;

하위 디렉토리를 포함하여 .현재 디렉토리에 있는 숨김되지 않은 파일(셸에 의해 확장됨) 목록과 함께 전달됨 (이러한 파일 중 하나가 또는 로 시작하거나 이름이 또는 인 파일이 있는 경우 ... 이로 인해 구문이 발생함 ) 오류가 보고됩니다).*test-!()find

따라서 에서 find파일을 재귀적으로 찾도록 지시하는 것입니다 . 따라서 파일은 두 번, 두 번 발견될 것입니다 ..testfindtesttest/file123

llls -l나는 이것이 파일 세부 사항이나 디렉토리 유형 파일을 나열하고 해당 디렉토리에 있는 모든 파일의 세부 사항을 나열하는 도구인 스크립트라고 생각합니다 (해당 -d옵션을 전달하지 않는 한).

so는 및 인수로 ll호출되며 , 이 경우 if는 해당 내용에 파일의 세부 정보(포함)를 나열합니다 ../testtesttest/file

./test/file123및 으로 호출 됩니다 test/file123.

원하는 곳은 다음과 같습니다.

find . -exec ls -ld {} +

(사용이란 +여러 파일이 더 효율적인 인수로 전달되고 ls파일 목록도 ls정렬될 수 있음을 의미합니다.)

비트리스트로 표현된 조건자를 find지원할 수도 있습니다 .-lsls -lsid

find . -ls

답변2

find현재 디렉터리( .)와 *그 디렉터리로 확장되는 모든 항목을 검색 하도록 요청하므로 4줄의 출력이 표시됩니다 .

현재 디렉터리의 경우 현재 디렉터리, 디렉터리 및 디렉터리의 파일이 되는 검색 내용을 find계속 호출합니다 . 이는 두 번 나열됩니다.lltesttestfile123

*그런 다음 확장된 모든 항목( 디렉터리)을 검색합니다 test. 이제 다시 사용할 수 ll있으며 test그 안에 있는 파일을 사용할 수 있습니다. 파일이 다시 두 번 나열됩니다.

대신 일반 파일을 찾으려면 를 사용하세요 . 기본적으로 검색된 경로 이름이 나열되므로 결과를 얻기 위해 ( 또는 )를 -type f사용할 필요가 없습니다 . 또한 현재 디렉터리(또는 )를 검색 경로로 사용하세요.lllsfindfindtest

find . -type f

정확한 이름의 파일을 찾고 있는 경우 file123:

find . -type f -name 'file123'

ls -l경로 이름 대신 유사한 출력을 원하는 경우 :

find . -type f -name 'file123' -ls

답변3

검색은 모든 디렉터리에서 반복적 으로 find수행됩니다.
찾기는 파일뿐만 아니라 디렉터리도 반환합니다!

테스트 디렉터리의 모든 파일을 나열하려면 다음 명령만 있으면 됩니다.
find test/ -type f

또한, 나는 당신이 무엇을 달성하려고 하는지 모르지만 find맨페이지를 확인하고 있습니다 -exec ll {} \;. find)

관련 정보