예를 들어, 디렉토리에서 파일과 디렉토리를 찾고 있습니다.
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가 가정됩니다 ( -printf
Linux 시스템에서 find
가장 일반적인 구현 ).find
답변2
두 번 찾기:
echo 'directories'
find . -name 'example.com*' -type d
echo 'non-directories'
find . -name 'example.com*' ! -type d
또한 이름 테스트에 사용된 패턴에 대한 참조를 참고하세요. 따옴표가 없으면 쉘은 를 호출하기 전에 문자열을 현재 디렉토리의 이름과 일치시키려고 시도합니다 find
. failglob
쉘 옵션이 쉘에 설정되어 있거나 쉘 옵션이 bash
unset 되지 않은 경우 , 아무것도 일치하지 않는 따옴표가 없는 와일드카드 패턴은 쉘에서 오류를 생성하고 전혀 호출되지 않습니다.NOMATCH
zsh
find
또는 디렉토리 경로 이름 끝에 슬래시를 출력하십시오( 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 명령에 대한 추가 파이프에 더 적합한 형식이기도 합니다.