find .
항목 유형(디렉토리/파일)을 표시하는 방법은 무엇입니까 ? 실제로 항목이 파일인지 빈 디렉터리인지 알 수 없습니다.
답변1
GNU 버전에는 다양한 파일 메타데이터를 인쇄하는 find
옵션이 있습니다 . -printf
예를 들어,
find . -printf "%y %p\n"
파일 유형(일반 파일의 경우 f, 디렉토리의 경우 d)과 해당 이름을 인쇄합니다.
Linux 배포판은 GNU 버전을 배포하는 경향이 있습니다 find
. GNU가 없으면 find
작은 스크립트가 필요할 수 있습니다.
find . -exec sh -c 'ls -l "$1" | cut -c1' sh-find "{}" \; -print
(다소 추악한 출력을 개선하는 것은 독자의 연습 문제로 남겨 둡니다).
답변2
이 ls
명령에는 디렉토리 뒤, 실행 파일 뒤, 기호 링크 뒤, 명명된 파이프 뒤에 하나를 추가하는 표준 옵션이 있습니다 -F
(그리고 구현 시 더 많은 기호를 추가할 수 있습니다. 매뉴얼 참조)./
*
@
|
ls
ls -F
찾은 각 항목을 호출합니다 .
find . -exec ls -1 -f -d -F {} +
-1
결과를 단일 열로 가져오고 -f
결과 정렬을 끄고( find
경로 이름을 찾는 순서를 가져오며) -d
내용 대신 디렉터리를 나열하기 위해 ("대시-원") 옵션을 추가했습니다 .
한 번에 호출할 수 있는 만큼 {} +
일괄적으로 발견된 경로 이름으로 대체됩니다 .ls
예제를 실행하세요:
$ find . -exec ls -1 -f -d -F {} +
./
./.bash_profile
./.zshrc
./.bashrc
./.yashrc
./dir1/
./dir1/file-1
./dir1/subdir/
./dir1/subdir/file-2
./dir2/
./dir2/file-1
./dir2/subdir/
./dir2/subdir/file-2
특정 문자로 끝나지 않는 경로 이름은 일반 파일입니다.
답변3
다음 명령은 비슷 find .
하지만 디렉터리 유형 파일에 대해 후행 슬래시를 추가합니다.
find . ! -type d -print -o -exec printf '%s/\n' {} \;
아이디어는 디렉토리를 나타내는 것입니다그리고여전히 출력에 유효한 기존 경로 이름이 표시됩니다.
노트:
이 명령은 이식 가능합니다.
로 끝나는 경로 이름을 사용하는 경우
.
(디렉토리가 존재함) 경로 이름이 처리될 때 제공된 문자열이 대신 교체됩니다. 실제로 ./
find
{}
//
/
루트 디렉터리를 지정 하고 정확하게 가져오지 않는 한 이는 문제가 되지 않습니다.//
. 해결 방법은/.
대신 을 지정하는 것입니다/
. 개선 사항은 후행 슬래시가 이미 있는 경우 추가하지 않는 것입니다.find … \( ! -type d -o -path '*/' \) -print -o -exec printf '%s/\n' {} \;
여기서 는
…
하나 이상의find
시작 경로 이름(또는 괜찮다면 0)을 나타냅니다. 그런 다음 안전하게 지정할 수 있습니다/
.