OSX의 디렉터리와 하위 디렉터리에 있는 모든 PDF 파일을 찾고 싶습니다.
예를 들어 이것은 많은 결과를 생성하기 때문에 하위 디렉토리에 일부 PDF가 있다는 것을 알고 있습니다.
ls myfolder/pdfs/*.pdf
내 모든 인터넷 검색은 내가 원하는 것을 보여 주지만 ls -R
결과는 없습니다.
ls -R *.pdf
내가 뭘 잘못했나요?
다음과 같은 결과를 찾을 수 있습니다.
ls -R | grep pdf
하지만 파일의 전체 경로를 볼 수 없으므로 별로 도움이 되지 않습니다.
답변1
ls -R *.pdf
ls
일치하는 콘텐츠는 재귀적으로 호출됩니다 *.pdf
(현재 디렉터리에 일치하는 내용이 없으면 *.pdf
결과를 얻지 못하고, 있는 경우 디렉터리가 디렉터리인 경우에만 해당 결과로 재귀됩니다). 원하는 결과가 아닌 정규식과 일치하는 모든 것을 결과에 ls -R | grep pdf
표시합니다 .ls -R
pdf
이것이 당신에게 필요한 것입니다:
find myfolder -type f -name '*.pdf'
그러면 파일 이름이 패턴과 일치하는 디렉토리 -type f
안이나 아래에 있는 모든 일반 파일()의 경로 이름이 제공됩니다. 셸에서 모드를 보호하려면 모드를 인용해야 합니다.myfolder
*.pdf
zsh
셸(최근 macOS의 기본 셸) 사용 :
print -rC1 myfolder/**/*.pdf(.ND)
myfolder
그러면 이름이 로 끝나는 디렉토리 안이나 아래에 있는 모든 일반 파일의 경로 이름이 단일 열에 인쇄됩니다 . .pdf
일치 항목에는 숨겨진 이름이 포함됩니다. glob 한정자의 and는 셸의 and 셸 옵션 설정에 해당하며(단, N
이 단일 와일드카드 패턴에만 해당) 점은 패턴이 일반 파일(예: 디렉터리 등이 아님)과만 일치하도록 만듭니다.D
nullglob
dotglob
bash
답변2
노력하다
find . -name \*.pdf -print
여기에는 pdf 또는 이와 유사한 내용이 나열되어야 합니다.
myfolder/foo/doc1.pdf
myfolder/bar/foo/doc2.pdf
시작 디렉토리에 pdf가 있는 경우 *
in을 이스케이프해야 합니다.*.pdf
답변3
bash
터미널의 기본 셸(버전 4 이상)에서 macOS
확장 glob 옵션을 활성화하여 globstar
중첩된 하위 디렉터리에서 재귀 glob 일치를 활성화합니다.
shopt -s globstar nullglob
printf '%s\n' **/*.pdf
nullglob
어떤 파일과도 일치하지 않는 파일 이름 패턴이 자체가 아닌 빈 문자열로 확장되는 것을 방지합니다 . 를 사용하면 globstar
파일 이름 확장 컨텍스트에 사용되는 패턴은 **
모든 파일과 0개 이상의 디렉터리 및 하위 디렉터리와 일치합니다.
안전을 위해 현재 셸에서 셸 옵션을 설정하지 말고 하위 셸에서 설정할 수 있습니다.
( shopt -s globstar nullglob; printf '%s\n' **/*.pdf ; )