IT story

이름이 문자열 인 모든 파일 찾기

hot-time 2020. 6. 10. 08:05
반응형

이름이 문자열 인 모든 파일 찾기


파일 이름에 문자열이 포함 된 현재 디렉토리에서 파일을 반환하는 명령을 찾고 있습니다. 내가 본 locatefind찾을 수있는 명령 파일은 무엇인가로 시작 first_word*또는 무언가로 끝나는 *.jpg.

파일 이름에 문자열이 포함 된 파일 목록을 어떻게 반환합니까?

예를 들어, 2012-06-04-touch-multiple-files-in-linux.markdown현재 디렉토리의 파일 인 경우 입니다.

이 파일과 문자열을 포함하는 다른 파일을 어떻게 반환 할 수 touch있습니까? 다음과 같은 명령 사용find '/touch/'


사용 find:

find . -maxdepth 1 -name "*string*" -print

maxdepth 1"string"을 포함 하는 현재 디렉토리에서 모든 파일을 찾고 ( 재귀 적이라면 삭제 ) 화면에 인쇄합니다.

':'이 포함 된 파일을 피하려면 다음을 입력하십시오.

find . -maxdepth 1 -name "*string*" ! -name "*:*" -print

사용하고 싶지만 grep(파일 내용을 확인하고 싶지 않은 한 필요하지 않다고 생각하는 경우) 다음을 사용할 수 있습니다.

ls | grep touch

그러나 반복 find합니다. 귀하의 작업에 더 좋고 깨끗한 솔루션입니다.


다음과 같이 grep을 사용하십시오.

grep -R "touch" .

-R재귀를 의미합니다. 하위 디렉토리로 들어 가지 않으려면 생략하십시오.

-i"대소 문자 무시"를 의미합니다. 시도해 볼 가치가 있습니다.


-maxdepth옵션은 이전에해야 -name다음과 같은 옵션을 선택합니다.,

find . -maxdepth 1 -name "string" -print

find $HOME -name "hello.c" -print

"hello.c"라는 파일이 있는지 전체 $HOME(예 /home/username/:) 시스템을 검색하고 해당 경로 이름을 표시합니다.

/Users/user/Downloads/hello.c
/Users/user/hello.c

그러나 일치하지 않습니다 HELLO.CHellO.C. 대소 문자를 구분하지 않으려면 -iname다음과 같이 옵션을 전달하십시오 .

find $HOME -iname "hello.c" -print

샘플 출력 :

/Users/user/Downloads/hello.c
/Users/user/Downloads/Y/Hello.C
/Users/user/Downloads/Z/HELLO.c
/Users/user/hello.c

-type f파일 만 검색 하려면 옵션을 전달하십시오.

find /dir/to/search -type f -iname "fooBar.conf.sample" -print
find $HOME -type f -iname "fooBar.conf.sample" -print

-iname버전의 find 명령 (OS X 포함) GNU 또는 BSD에 중 하나를 사용할 수 있습니다. find 명령 버전이을 지원하지 않으면 command를 -iname사용하여 다음 구문을 시도하십시오 grep.

find $HOME | grep -i "hello.c"
find $HOME -name "*" -print | grep -i "hello.c"

또는 시도

find $HOME -name '[hH][eE][lL][lL][oO].[cC]' -print

샘플 출력 :

/Users/user/Downloads/Z/HELLO.C
/Users/user/Downloads/Z/HEllO.c
/Users/user/Downloads/hello.c
/Users/user/hello.c

문자열이 이름의 시작 부분에 있으면 이렇게 할 수 있습니다

$ compgen -f .bash
.bashrc
.bash_profile
.bash_prompt

이미 제공된 많은 솔루션의 대안은 glob를 이용하는 것입니다 **. 당신이 사용하는 경우 bash옵션과 함께 globstar( shopt -s globstar) 또는를 사용합니다 zsh, 당신은 단지 글로브 사용할 수 있습니다 **이것에 대한합니다.

**/bar

재귀 디렉토리에서 이름이 지정된 파일을 검색합니다 bar( bar현재 디렉토리 의 파일 포함 할 가능성이 있음 ). 이것은 동일한 경로 세그먼트 내에서 다른 형태의 글 로빙과 결합 될 수 없습니다. 이 경우 *작업자는 일반적인 효과로 되돌아갑니다.

Note that there is a subtle difference between zsh and bash here. While bash will traverse soft-links to directories, zsh will not. For this you have to use the glob ***/ in zsh.


find / -exec grep -lR "{test-string}" {} \;

grep -R "somestring" | cut -d ":" -f 1

참고URL : https://stackoverflow.com/questions/11328988/find-all-files-with-name-containing-string

반응형