pdf 파일을 찾기 위해 Linux에서 find 명령


11

내 목표는 원격 컴퓨터에서 모든 pdf 파일을 찾는 것이므로 유용한 명령을 사용 find합니다. 그래서 나는 입력

~ * .pdf 찾기
또는
~ "* .pdf"찾기
나는 아무것도 얻지 못했습니다. 나는 내 컴퓨터에서 똑같이하고 아무것도 얻지 못합니다. 컴퓨터의 메뉴에서 정기적으로 검색을 수행하며 pdf 파일이 상당히 많습니다. 누군가 내가 뭘 잘못하고 있는지 말해 줄래?


11
좋은 답변을 원한다면 부정적인 의견을 질문 외부에 두십시오. 관련 기사 find에서 쓸모없는 것과는 거리가 멀다.
wilhelmtell

8
물론 당신은 언론의 자유를 가질 권리가 있습니다. 하지만 좋은 반응을 원하십니까? 아닙니다, 당신은 좋은 건설적인 대응에 대한 권리 가 없습니다 . 그것은 특권입니다.
wilhelmtell

2
나쁜 노동자는 항상 그의 도구를 비난합니다. 다시 말해, 순수한 PBCAK 입니다.
Pascal Thivent

5
@ Wilhelmtell, 나는 Martin의 진술이 공정하다고 생각합니다. 명령은 "walkpath_and_execute"와 같이 처음에는 "find"로 이름을 지정해서는 안됩니다 ... 가장 직관적이거나 사용자 친화적 인 인터페이스가 없으며 훨씬 더 많은 일을합니다 단순히 파일을 찾는 것보다. 단순한 이름 "find"는 그것이없는 단순한 인터페이스를 제안한다는 점에서 기만적입니다. 물론 찾기는 쓸모가 없으며 아주 잘 작동하지만, "찾기", "위치 찾기", "어떤"등의 차이를 모르는 초보자를 탓할 수는 없습니다.
Michael Aaron Safyan

1
@Michael 나는 여기에 누군가를 비난하지 않았다; 또는 오히려, 나는 여기서 비난을하는 사람이 아니었다. 나는 find직관적 이라고 말하지 않았다 . 그래도 더 좋은 톤으로 같은 것을 말할 수 있습니다. 때로는 부정적인 말에 반응합니다.
wilhelmtell

답변:


30

find쓸모가 없습니다. 당신은 그것을 올바르게 사용하지 않습니다.

시험:

find . -type f -iname '*.pdf'


@Martin-도와 드리겠습니다. 질문에 답변 된 것으로 표시하십시오.
Mitch Dempsey

@stepancheg 예, 인터넷을 중단하고 하드 카피를 인쇄하십시오.
bobobobo

9

findutils 에 대한 문서를 살펴보십시오 . 이 find명령은 엄청나게 강력한 명령이며 결과적으로 다소 복잡한 인터페이스를 가지고 있습니다. 당신이 원하는 것을 할 수 있습니다 :

find . -type f -iname '*.pdf' 

위의 명령은 ".pdf에서 대소 문자를 구분하지 않는 이름이 * .pdf 인 파일 유형의 항목에 대해. find 명령은 실제로 파일 이름을 인쇄하는 대신 또는 파일 이름을 찾아서 찾은 파일에서 명령을 실행하는 데 사용할 수 있습니다. 당신의 목적을 위해, 그러나, 당신은에 자신을 더 편안하게 찾을 수 있습니다 찾을 당신이 사용 데이터베이스의 위치를 구축했다 가정 - 명령, updatedb에를 - 매우 쉽게 파일을 찾을 수 있습니다. 예를 들면 다음과 같습니다.

locate '*.pdf'

locate는 파일 이름 색인 (locate 데이터베이스)을 사용하는 반면, find는 각 호출에 대한 계층 구조를 따라 가기 때문에 locate 명령이 일반적으로 find 명령보다 빠르다는 것을 알 수 있습니다.


6

검색 대상을 나타내는 술어가 누락되었습니다 (예 :) -name.

홈 디렉토리에서 이름으로 찾으려면 다음을 수행하십시오.

find ~ -name \*.pdf

와일드 카드 *는 이스케이프 처리되어야합니다. 그래야 find가 손을 잡기 전에 쉘이 해석하지 않습니다. 사용 '*.pdf'"*.pdf"같은 영향을 미칠 것입니다 \*.pdf.

대소 문자를 구분하지 않으려면 :

find ~ -iname \*.pdf

결과를 파일로만 정리하려면 (이름 표현식이이를 대신하여 처리하지만 이상한 이름의 디렉토리가있는 경우) :

find ~ -type f -iname \*.pdf

찾기가 심볼릭 링크를 따르는 지 확인하려면 (보통 검색 할 때 직접 수행하고 싶습니다) :

find ~ -follow -type f -iname \*.pdf

찾은 파일로 작업을 수행하려면 stdout 리디렉션을 사용하여 파일로 덤프 > filename하거나 (예 : 끝에 압정 ) -exec옵션을 사용하여 명령을 실행할 수 있습니다 (자세한 내용은 맨 페이지 참조). 후자는 한 번에 각 파일에 대해 명령을 실행합니다. xargs찾은 파일을 한 번에 또는 한 번에 큰 덩어리로 다른 명령에 대한 인수로 전달 하는 것이 더 빠릅니다 . 예를 들어, 임시 파일 (인덱싱되지 않은)이 헤더 파일을 통과하는 경우 :

find ~ -follow -type f -name \*.h | xargs grep -nH "identifier"

공백이있는 파일 및 디렉토리가있는 경우 마지막 명령이 올바르게 작동하도록하는 마지막 확장명 :

find ~ -follow -type f -name \*.h -print0 | xargs -0 grep -nH "identifier"

실제로 현재 디렉토리에 .pdf로 끝나는 파일이 있으면 "* .pdf"가 확장됩니까? (사소한 메모)
Peter Jaric

1
bash에는 없습니다. bash 매뉴얼에서 : "큰 따옴표로 문자를 묶으면 [달러], [backquote], [pipe] 및 히스토리 확장이 활성화 된 경우 [bang]을 제외하고 따옴표 내 모든 문자의 리터럴 값을 유지합니다. " 텍스트 파일이있는 디렉토리에서 ls "* .txt"를 직접 확인하십시오.
Owen S.

예, 물론입니다. 나는 그 아이디어를 어디서 얻었는지 모른다. 수정 해 주셔서 감사합니다.
피터 Jaric


0

나는 찾기와 grep을 결합하는 데 사용했습니다.

찾기 . . | grep -i ".pdf"

어쩌면 최고 효율은 아니지만 잘 작동합니다.


이것은에서 할 수있는 find당신을 통해, 원한다면 직접 -iregex: find ~ -iregex '.*\.pdf'. 문제는 find패턴이 항상 ^앞면과 $뒷면에있는 것처럼 처리되므로 패턴이 조금 더 복잡해야한다는 것입니다. 또한 .패턴에서 실제로는 문자가 아닌 단일 문자 와일드 카드입니다.
Owen S.

0

지난 x 일 이내에 다운로드해야하는 파일 찾기

find ~ -type f -iname '*.pdf' -mtime -1

당신이 당신의 가정에있는 파일을 PDF 찾을 ~확장자를 가진 디렉토리 아래에 .pdf대문자와 소문자 (전에서 그게 전부에 관계없이 iname및 1 일 전 내가 추가 한 때문에 변경 한) mtime -1; mtime에 -60을 입력하면 지난 60 일이됩니다.


0

"found"파일 내에서 검색을 실행하려면 다음과 같이 구성됩니다.

find <dir> -type f -iname <name> -exec grep -H <string> {} \;

exec 명령은 이스케이프 된 ";"로 끝나야합니다. 그리고 -H는 grep이 "string"이있는 파일 내의 행 외에 파일 경로를 인쇄하기 위해 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.