OSX에서 파일을 재귀적으로 나열하시겠습니까?

OSX에서 파일을 재귀적으로 나열하시겠습니까?

OSX의 디렉터리와 하위 디렉터리에 있는 모든 PDF 파일을 찾고 싶습니다.

예를 들어 이것은 많은 결과를 생성하기 때문에 하위 디렉토리에 일부 PDF가 있다는 것을 알고 있습니다.

ls myfolder/pdfs/*.pdf

내 모든 인터넷 검색은 내가 원하는 것을 보여 주지만 ls -R결과는 없습니다.

ls -R *.pdf

내가 뭘 잘못했나요?

다음과 같은 결과를 찾을 수 있습니다.

ls -R | grep pdf

하지만 파일의 전체 경로를 볼 수 없으므로 별로 도움이 되지 않습니다.

답변1

ls -R *.pdfls일치하는 콘텐츠는 재귀적으로 호출됩니다 *.pdf(현재 디렉터리에 일치하는 내용이 없으면 *.pdf결과를 얻지 못하고, 있는 경우 디렉터리가 디렉터리인 경우에만 해당 결과로 재귀됩니다). 원하는 결과가 아닌 정규식과 일치하는 모든 것을 결과에 ls -R | grep pdf표시합니다 .ls -Rpdf

이것이 당신에게 필요한 것입니다:

find myfolder -type f -name '*.pdf'

그러면 파일 이름이 패턴과 일치하는 디렉토리 -type f안이나 아래에 있는 모든 일반 파일()의 경로 이름이 제공됩니다. 셸에서 모드를 보호하려면 모드를 인용해야 합니다.myfolder*.pdf

zsh셸(최근 macOS의 기본 셸) 사용 :

print -rC1 myfolder/**/*.pdf(.ND)

myfolder그러면 이름이 로 끝나는 디렉토리 안이나 아래에 있는 모든 일반 파일의 경로 이름이 단일 열에 인쇄됩니다 . .pdf일치 항목에는 숨겨진 이름이 포함됩니다. glob 한정자의 and는 셸의 and 셸 옵션 설정에 해당하며(단, N이 단일 와일드카드 패턴에만 해당) 점은 패턴이 일반 파일(예: 디렉터리 등이 아님)과만 일치하도록 만듭니다.Dnullglobdotglobbash

답변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 ; )

관련 정보