Linux는 주어진 문자열로 파일 이름을 찾습니다.


107

저는 Ubuntu를 사용하고 있으며 현재 디렉터리 및 이름에 "John"이라는 문자열이 포함 된 하위 디렉터리의 모든 파일을 찾고 싶습니다. grep파일의 내용과 일치 할 수 있다는 것을 알고 있지만 파일 이름과 함께 사용하는 방법을 모릅니다. 어떤 도움을 주시면 감사하겠습니다.


답변:


195

find 명령을 사용하십시오.

find . -type f -name "*John*"

1
와 사용자 정의 bash는 스크립트를 작성하면 #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi 그냥 실행 할 것이다 F search-string완벽한 바로 가기로
일리아 Rostovtsev

@IliaRostovtsev-좋지만 [ -z "$1" ]조금 더 좋을 것입니다.

@ 조 아, 맞아. 경로에 공백이있는 경우를 의미합니까? 하지만 여기서 우리는 $ 1 공간의 존재 만 확인하면 $ 2가 나타나게됩니다. 이론적으로 더 낫다는 뜻 이죠?
Ilia Rostovtsev 2015 년

@IliaRostovtsev-사실, 내가 틀렸어. $ 1이 null이면 테스트는 if [ -z ]. 구문 오류라고 생각했지만 작동합니다. 이제부터는 일부 코드를 단순화 할 수 있습니다.

25

정답이 이미 제공되었지만 스스로를 돕는 방법을 배우기 위해 다른 방법으로 도움이되는 것을 던질 것이라고 생각했습니다. 달성하려는 것을 한 단어로 요약 할 수 있다면 Linux에 강력한 도움말 기능이 있습니다.

man -k <your search term>

짧은 설명에 검색어가 포함 된 모든 명령을 나열합니다. 일반적으로 원하는 것을 찾을 수 있는 좋은 기회가 있습니다 . ;)

이 출력은 때때로 다소 압도적 일 수 있으므로 다음과 같이 사용 가능한 모든 맨 페이지보다는 실행 파일로 범위를 좁히는 것이 좋습니다.

man -k find | egrep '\(1\)'

또는 다음과 같이 더 높은 권한 수준이 필요한 명령도 검색하려는 경우 :

man -k find | egrep '\([18]\)'

3
궁금합니다 ... 검색을 통해 당면한 문제를 해결하려는 시도가없는 질문은 찬성 투표를 받고 가능한 명령을 찾는 방법에 대한 친숙한 설명이 밟 히게됩니다. 기준은 무엇입니까? :)
Tink

1
내가 당신을 찬성했습니다. 교훈은 거의 없습니다. 그러나 우리는 샘플을보고 :) 적응할 수
tgkprog

2

find명령은 파일 시스템의 실제 파일을 스캔하므로 시간이 오래 걸립니다.

가장 빠른 방법은 locate즉시 결과를 제공하는 명령을 사용 하는 것입니다.

locate "John"

명령을 찾을 수없는 경우 먼저 mlocate패키지 를 설치 하고 updatedb명령을 실행 하여 검색 데이터베이스를 처음으로 준비해야합니다.

자세한 내용은 https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab



1

이것은 tree검색하려는 디렉토리 에서 명령을 사용하는 매우 간단한 솔루션 입니다. -f전체 파일 경로 를 표시하며 이름에 문자열 이 포함 된 파일을 찾기 위해 |tree의 출력을 파이프하는 데 사용됩니다 .grepfilename

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