2009-03-18 5 views
30

eclipse 및 textmate와 같은 편집기/편집기에는 프로젝트 디렉토리에서 특정 파일을 빨리 찾을 수있는 바로 가기가 있습니다.디렉토리에서 명령 줄에서 파일 찾기

(재귀 적으로) 디렉토리 내의 파일 이름, bash 또는 다른 쉘에서 전체 경로 완성을 수행하는 유사한 도구가 있습니까?

나는 많은 디렉토리가있는 프로젝트와 깊은 곳의 프로젝트 (한숨, 자바)를 가지고있다. 쉘에 즉각적인 디렉토리에있는 파일을 통해만을주기를 탭을 친 =/

+0

[Linux에서 특정 텍스트가 포함 된 모든 파일을 찾는 방법은 무엇입니까?] (https://stackoverflow.com/questions/16956810/how-do-i-find-all-files-containing-specific-text -on-linux) – Bruno

답변

53
find /root/directory/to/search -name 'filename.*' 
# Directory is optional (defaults to cwd) 

표준 UNIX의 대체 (globbing)가 지원됩니다 충분하지 이잖아. 자세한 내용은 man find을 참조하십시오. 당신이 빔을 사용하는 경우

, 당신은 사용할 수 있습니다

:e **/filename.cpp 

또는 :tabn 또는 파일 이름을 받아들이는 임의의 빔 명령.

+0

@Bryan Oakley, 편집 해 주셔서 감사합니다. 그러나 Vim에 대한 덧붙여 말입니다. 나는 대답에서 전화 번호부의 주장을 다시 언급했다. 감사. – strager

+0

Vim 팁을 보내 주셔서 감사합니다. 그 중 하나는 여전히 내가 모르는 유용합니다 : P – skinp

+1

어쨌든 그것을 모든 방법을 입력하지 않고 현재 디렉토리에 이렇게 할 수 있습니까? –

0

예, bash에는 파일 이름 완성 메커니즘이 있습니다. 나는 그들 자신을 사용하지 않는다. (배우기에는 너무 게으르며, 긴급하기에 충분하지 않다.) 기본적인 메커니즘은 처음 몇 글자를 입력 한 다음 탭을 누른다. 이것은 이름이 모호하지 않는 한 이름을 확장 할 수 있습니다. good ol man 페이지에는 완료와 관련된 Emacs 스타일의 명령이 많이 있습니다.

2

유닉스 환경 (tcsh (sigh ...) 사용)에 필자는 모든 종류의 "찾기"별칭/스크립트를 사용하여 파일을 검색했습니다. 나는 기본 구문은 조금 투박하다 "찾기"생각, 그래서 별명이/파이프 스크립트를 가지고하는 데 사용 당신이 검색을 위해 정규 표현식을 사용할 수있는 그렙에 "찾아 -print."의

# finds all .java files starting in current directory 
find . -print | grep '\.java' 

#finds all .java files whose name contains "Message" 
find . -print | grep '.*Message.*\.java' 

물론 위의 예는 평범한 find로 할 수 있지만 좀 더 구체적인 검색을한다면 grep이 상당히 도움이 될 수 있습니다. "find .print"가 너무 많은 디렉토리를 통해 반복되는 경우가 아니면 꽤 잘 작동합니다 ... 그러면 꽤 느려집니다. (예를 들어 루트 "/"에서 시작하는 것을 원하지 않을 것입니다.)

7

파일 목록으로 무엇인가를하려한다면 bash $() 구문과 결합 된 find를 사용할 수 있습니다 backticks는 둥지를 틀었다.

예를 들어, 프로젝트 디렉토리의 최상위 레벨에 있고 "btree"로 시작하는 모든 C 파일의 목록을 원한다고 가정 해보십시오. 명령 :

find . -type f -name 'btree*.c' 

이 목록을 반환합니다. 그러나 이것은 그들과 무언가를하는 데 정말로 도움이되지 않습니다.

그래서 "ERROR"라는 문자열을 모두 검색하거나 모두 편집하려고한다고 가정 해 봅시다. 다음 중 하나를 실행할 수 있습니다.

grep ERROR $(find . -type f -name 'btree*.c') 
vi $(find . -type f -name 'btree*.c') 

1

나는 script을 사용하여 프로젝트의 여러 디렉토리에서 파일을 빠르게 찾습니다.나는 위대한 작품을 발견하고 Vim의 자동 완성을 이용하여 검색을위한 새로운 버퍼를 열어 닫는다. 또한 지능적으로 가능한 한 많이 완료하므로 일반적으로 문자 하나 또는 두 개를 입력하고 프로젝트의 모든 디렉토리에서 파일을 열 수 있습니다. 자바 프로젝트 때문에 특별히 사용하기 시작했고 많은 시간을 절약 해주었습니다. FC (디렉토리 이름)를 입력하여 편집 세션을 시작할 때 캐시를 한 번만 빌드하면됩니다. 그냥 사용할 수도 있습니다. 현재 디렉토리 및 모든 하위 디렉토리를 가져옵니다. 그 다음에는 FF (또는 FS로 새로운 분할을 여는 것)를 입력하면 원하는 파일을 선택하는 새 버퍼가 열립니다. 파일을 선택하면 임시 버퍼가 닫히고 요청한 파일 안에 있으므로 편집을 시작할 수 있습니다. 또한 here은 스택 오버플로의 또 다른 링크로 도움이 될 수 있습니다.

0

locate <file_pattern>

*** find 확실히 작동, 및 특정 디렉토리를 타겟팅 할 수 있습니다. 그러나이 명령은 locate 명령보다 느립니다. Linux OS에서는 매일 아침 모든 디렉토리와 파일의 목록을 포함하는 데이터베이스가 생성되며 locate 명령은이 데이터베이스를 효율적으로 검색하므로 오늘 생성되지 않은 파일을 검색하려면이 옵션이 유용합니다. 그러한 작업을 수행하는 가장 빠른 방법.