Book1 이라는 파일을 찾으려고합니다 .
내 테스트에서 위에서 언급 한 파일을 찾으려고 하는데이 테스트에서 해당 파일이 어디에 있는지 모르겠습니다.
시도 find / -iname book1
했지만 출력이 없습니다.
파일의 위치를 모르는 경우 명령 행을 사용하여 book1이라는 파일을 어떻게 찾을 수 있습니까?
편집하다:
내 시나리오는 아래에 더 자세히 설명되어 있습니다.
- 파일 확장자를 알 수 없습니다
- 정확한 이름 (예 : 대문자, 숫자 등)을 알 수 없음
- 파일의 위치를 알 수 없음
답변
먼저에 대한 인수 -iname
는 쉘 패턴 입니다. Bash manual 에서 패턴에 대한 자세한 내용을 읽을 수 있습니다 . 요점은 find
실제로 파일을 찾으 려면 파일 이름이 지정된 패턴과 일치해야한다는 것입니다. 대소 문자를 구분하지 않는 문자열을 book1
일치 시키려면 다음과 같이 Book1.gnumeric
추가 *
해야합니다.
find / -iname 'book1*'
또는 전체 이름을 지정하십시오.
find / -iname 'Book1.gnumeric'
둘째, -iname
만들 것이다 find
지정하면 이렇게 파일 이름 케이스를 무시 -iname book1
가도 찾을 수 있습니다 Book1
, bOok1
당신은 당신이라고 찾고 있는지 파일 경우 등을 Book1.gnumeric
사용하지 않는 다음 -iname
하지만 -name
더 빠르게 될 것입니다 :
find / -name 'Book1.gnumeric'
셋째, 다른 답변 에서 언급 한대로 패턴을 인용하는 것에 대해 기억하십시오 .
그리고 마지막으로- 시스템의 어느 곳에서나 파일을 찾고 싶
습니까? 찾고있는 파일이 실제로 $HOME
작업했거나 다른 곳에서 다운로드 한 경우 디렉토리에있을 수 있습니다. 다시 말하지만, 훨씬 빠를 수 있습니다.
편집 :
질문을 편집 한 것으로 나타났습니다. 전체 파일 이름, 대문자 및 위치를 모르는 경우 다음과 같이 사용해야합니다.
find / -iname 'book1*'
또한 루트가 아닌 사용자로 호출 할 경우 나타날 2>/dev/null
모든 *permission denied*
오류 및 기타 오류 를 숨기려면 줄 끝에 두는 것이 좋습니다 find
.
find / -iname 'book1*' 2>/dev/null
그리고 단일 파일을 찾고 있다고 확신하고 시스템 find
에 첫 번째 일치하는 파일을 찾은 후 종료하도록 지시 할 수있는 기준과 일치하는 단일 파일 만있는 경우 :
find / -iname 'book1*' -print -quit 2>/dev/null
답변
locate
명령을 시도 할 수 있습니다 . 검색 속도를 높이기 위해 파일 이름 데이터베이스를 사용합니다.
일치하는 모든 파일을 검색 *book1*
하고 대소 문자를 무시하려면
locate -i book1
시작 하는 파일을 검색 book1
하려면 와일드 카드를 직접 수행해야합니다.
locate -i 'book1*'
보다 빠르지 find
만 데이터베이스를 마지막으로 새로 고쳤을 때만 최신 상태입니다.
답변
당신은 당신이라는 파일이 알고있는 경우 book1.something
파일 위치의 정확한 값, something
및 파일 이름의 대소 문자 패턴이 모두 알을 :
find / -iname 'book1.*'
당신이 확실히 알고있는 모든 파일 이름이 단어를 포함하는 경우 book
, 당신은있는 가능성이 훨씬 더 큰 목록을 생성 할 수 있습니다
find / -iname '*book*'
의 인수 -name
는 쉘 글로브 패턴입니다. 파일이있는 디렉토리에서 다음을 비교하십시오.
$ ls Book1
ls: cannot access 'Book1': No such file or directory
$ ls Book1.*
Book1.gnumeric
에 의해 수행되는 검색 종류를 나타냅니다 -name
. 이 -iname
옵션은 대소 문자를 구분하지 않는 버전을 허용합니다.
답변
POSIXly,
LC_ALL=C find / -name '*[bB][oO][oO][kK]1*'
이름에 포함 된 모든 파일의 경로를보고합니다 book1
(사건의 어떤 변화에 있지만, 오직 ASCII 라틴 문자 생각 bokBOK
처럼 유니 코드가 아닌 다른 많은 변화를 ?
, ?
, ?
, ᵏ
, ₖ
, K
, k
그들의 모든 변화 … 분음 부호)에서 읽기 권한이있는 모든 디렉토리
답변
이러한 종류의 작업을 위해 나는 항상 다음을 수행합니다. find / -iregex '.*Book1.*'
이 양식은 시나리오의 세 가지 점을 처리합니다 ( iregex
대소 문자를 구분하지 않는 합리적인 표현이며 .*
양쪽에있는 패턴은 Book1의 고정 패턴 전후에 어떤 문자와 일치합니다. 이는 분명히 필요한 것보다 더 많은 결과를 줄 수 있습니다 그러나 당신은 파일을 놓치지 않을 것입니다)
가장 큰 차이점은 : 가능하면 바로 사용하는 것보다 더 제한적으로 /
만 시도처럼, /home
그렇지 않으면 당신은 관련이없는 일부 디렉토리에 내려 것, 정도 ( /sys
, /dev
, 등 …)
그러나 Unix 권한이 적용됩니다. 파일이 find
명령을 실행하는 사용자에게 액세스 (실행) 권한이없는 디렉토리에 있으면 파일 find
을 찾을 수 없습니다.
답변
Silver Searcher 는 파일과 콘텐츠를 검색 할 수있는 매우 빠르고 편리한 유틸리티입니다.
문제를 해결하기 위해 silver searcher 명령은 다음과 같습니다.
ag -g Book1
-g PATTERN
PATTERN과 일치하는 파일 이름 인쇄
답변
locate
그리고 그 변형은 빠른 방법 인 경향이 있습니다.
# updatedb # run as root, possibly using sudo, e.g. sudo -b updatedb. If file is on the system for more than a day it should already be in the index and this can be skipped
$ locate -i book1
찾기를 사용할 수없는 경우 find
대신 사용할 수 있습니다 . 훨씬 느리지 만 더 정확한 경향이 있습니다.
단일 파티션이있는 경우 : (사용자가 파일에 액세스 할 수없는 경우 루트로 실행)
$ find / -xdev -iname 'book1*' -print # If the iname extension to find is available
$ find / -xdev -print | grep -F -i /book1 # if iname is not available
당신은 포함하지 않는 경우 -xdev
find
다른 같은 파티션에 검색 것들 /proc
과 /sys
당신이 루트가 특히 오류가있는 화면을 범람하는 경향이있다. ( 2> /dev/null
찾기 명령 끝에 주석 을 추가하여 오류를 숨길 수 있습니다 (주석을 제거해야 함))
파티션이 여러 개이고 파일이있는 파티션을 모르는 경우 lsblk
(Linux 기반 OS의 경우 구문 분석 df
출력은 옵션 임)를 사용 하여 목록을 가져 와서 찾은 위치에 넣을 수 있습니다. 파일에 액세스 할 수 있는지 모르겠습니다)
$ find $(lsblk -O MOUNTPOINT -n | grep -F /) -xdev -iname 'book1*' -print # GNU-based OSes
$ find $(df -P|awk '$1 ~ /^\/dev/ {print $NF}') -xdev | grep -F -i book1 # Non-GNU based OSes.
((당신의 마운트 포인트 중 하나가에 공백이있는 경우이 조금 약해) df
매개 변수는 GNU가 있습니다 -P. 조정이 필요할 수 있습니다 df
. 표준 POSIX 출력을주고 다른 버전이 다른 매개 변수를가하거나 탈락 할 수도 있습니다. 당신의 남자 페이지를 참조)
grep -F
스왑 파티션과 같이 반환 된 다른 항목 은 제외됩니다.
GNU 이외의 버전에서 awk /dev
는 실제 파일 시스템을 가져 오기 위해 마운트가있는 장치를 찾은 다음 출력에서 마지막 필드 (마운트 포인트)를 인쇄합니다 df
.
이것은 또한 본쉘 같은 가정 ( ksh
그리고 bash
당신이 사용하는 경우. 작업을해야 csh
변형을하는 시작 스크립트 쉘을 당신이 시도하기 전에)