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