"find" 명령의 출력에 디렉터리를 표시하는 방법은 무엇입니까?

"find" 명령의 출력에 디렉터리를 표시하는 방법은 무엇입니까?

예를 들어, 디렉토리에서 파일과 디렉토리를 찾고 있습니다.

ubuntu@example:/etc/letsencrypt$ sudo find . -name example.com*
./archive/example.com
./renewal/example.com.conf
./live/example.com
ubuntu@example:/etc/letsencrypt$ 

위 출력에서 ​​디렉토리를 어떻게 표시할 수 있습니까 ./archive/example.com?./live/example.com

답변1

파일 유형과 이름을 인쇄하려면 다음 명령을 사용하십시오 -printf "%y %p\n".

$ sudo find . -name 'example.com*' -printf "%y %p\n"
d ./archive/example.com
f ./renewal/example.com.conf
d ./live/example.com

GNU가 가정됩니다 ( -printfLinux 시스템에서 find가장 일반적인 구현 ).find

답변2

두 번 찾기:

echo 'directories'
find . -name 'example.com*'   -type d

echo 'non-directories'
find . -name 'example.com*' ! -type d

또한 이름 테스트에 사용된 패턴에 대한 참조를 참고하세요. 따옴표가 없으면 쉘은 를 호출하기 전에 문자열을 현재 디렉토리의 이름과 일치시키려고 시도합니다 find. failglob쉘 옵션이 쉘에 설정되어 있거나 쉘 옵션이 bashunset 되지 않은 경우 , 아무것도 일치하지 않는 따옴표가 없는 와일드카드 패턴은 쉘에서 오류를 생성하고 전혀 호출되지 않습니다.NOMATCHzshfind


또는 디렉토리 경로 이름 끝에 슬래시를 출력하십시오( ls -p디렉토리가 표시되는 방식입니다).

find . -name 'example.com*' \( -type d -exec printf '%s/\n' {} \; -o -print \)

find명령은 먼저 이름이 올바른지 테스트합니다. 그렇다면 디렉토리이고 printf뒤에 슬래시가 붙은 출력 디렉토리의 경로 이름을 호출합니다. 디렉터리가 아닌 경우 -print경로 이름을 그대로 출력하는 데 사용됩니다.

GNU의 경우 find-exec printf '%s/\n' {} \;비트는 -printf '%p/\n'.

표준을 사용하면 외부 유틸리티 호출이 가능한 find한 적지만 이는 디렉토리가 아마도 마지막으로 출력되거나 적어도 일괄적으로 출력된다는 의미입니다.-exec printf '%s/\n' {} +printf


또 다른 옵션은 실제로 ls -p디렉터리를 다른 파일 형식과 구별하는 데 사용하는 것입니다. 를 사용하면 위와 마찬가지로 ls -p디렉터리가 후행 문자와 함께 나열됩니다 ./

find . -name 'example.com*' -exec ls -f -d -p {} +

출력 정렬을 -f피하고 나열을 피하기 위해 여기를 사용하고 있습니다 .ls-d콘텐츠목차.

또한 넣는 ls -F대신ls -p다른디렉터리 이외의 파일 형식을 표시합니다. 예를 들어 실행 파일에는 접미사가 붙고 *심볼릭 링크에는 접미사가 붙습니다 @.

-p( -F-f)는 -d모두 이 유틸리티의 표준 옵션입니다 ls.

답변3

다음과 같이 사용할 수 있습니다 file.

sudo find . -name "example.com*" -print0 | xargs  -0 sudo file

출력 예:

$ sudo find .  -name "example.com*"   -print0 | xargs  -0 sudo file
./example.com. big file: ASCII text
./example.com-dir:       directory
./example.com:           empty

답변4

gnu 옵션 없이 *nix 버전과 함께 사용할 수 있는 보다 이식성 있는 옵션(예: macOS)을 원하는 경우 -printf다음과 같이 디렉터리 경로 끝에 슬래시를 추가할 수 있습니다.ls

find . -name "example.com*" -exec ls -dF {} \;

예:

$ sudo find . -name "example.com*" -exec ls -dF {} \;
./archive/example.com/
./renewal/example.com.conf
./live/example.com/

이는 또한 더 많은 UNIX 명령에 대한 추가 파이프에 더 적합한 형식이기도 합니다.

관련 정보