Book1 .
테스트에서 앞서 언급 한 파일을 찾으려고하는데이 테스트에서는 해당 파일의 위치를 알 수 없습니다.
p>
find / -iname book1
를 시도했지만 출력이 없습니다.
모르는 경우 명령 줄을 사용하여 book1이라는 파일을 찾으려면 어떻게해야합니까? 파일이 어디에 있습니까?
편집 :
내 시나리오가 설명되었습니다. 자세한 내용은 다음과 같습니다.
- 파일 확장자를 알 수 없습니다.
- 정확한 이름 (예 : 대문자, 숫자 등)을 알 수 없습니다.
- 파일 위치를 알 수 없습니다.
댓글
답변
먼저, -iname
에 대한 인수는 쉘 패턴 입니다. 패턴에 대한 자세한 내용은 Bash 설명서 를 참조하세요. 요점은 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
댓글
Answer
locate
명령을 사용할 수 있습니다. 파일 이름 데이터베이스를 사용합니다. 더 빨리 검색 할 수 있습니다.
*book1*
와 일치하는 모든 파일을 검색하고 대소 문자를 무시하려면
locate -i book1
book1
로 시작 하는 파일을 검색하려면 와일드 카드를 직접 수행해야합니다.
locate -i "book1*"
find
보다 훨씬 빠르지 만 데이터베이스를 마지막으로 새로 고친 시점만큼만 최신 상태입니다.
댓글
- 어떤 출력도 생성되지 않았습니다.
locate -i after.sh
,sudo locate -i "after.sh"
,sudo locate -i after.sh
,sudo locate -i '*after.sh'
답변
book1.something
라는 파일이 있다는 것을 알고있는 경우, 파일 위치는 something
의 정확한 값입니다. , 파일 이름의 대소 문자 패턴은 모두 알 수 없습니다.
find / -iname "book1.*"
확실히 알고있는 것은 파일 이름에 ,
find / -iname "*book*"
-name
는 쉘 glob 패턴입니다. 파일이있는 디렉토리에서 다음을 비교합니다.
$ ls Book1 ls: cannot access "Book1": No such file or directory $ ls Book1.* Book1.gnumeric
이것은 -name
에서 수행 한 검색의 종류를 나타냅니다. -iname
옵션은 단순히 대소 문자를 구분하지 않는 버전을 허용합니다.
Answer
POSIXly,
LC_ALL=C find / -name "*[bB][oO][oO][kK]1*"
이름에 book1
가 포함 된 모든 파일의 경로를보고합니다 (대소 문자 변형 포함). , 그러나 𝗄
, 𝚔
만 고려합니다. ,𝘬
,ᵏ
,ₖ
,K
,k
및 분음 부호가있는 모든 변형 …) 읽기 액세스 권한이있는 모든 디렉토리에 있습니다.
답변
Zsh를 사용하면 glob 패턴을 사용할 수 있으므로 이것도 작동합니다.
ls -a /**/book1
book1
라는 파일이있는 모든 위치를 찾으세요.
내 테스트에서는
, 루트 권한없이 실행할 때 사용자 권한 오류 가 거의 또는 전혀 발생하지 않습니다.
manual .
Answer
저는 항상 이런 종류의 작업을 수행합니다. find / -iregex ".*Book1.*"
이 양식은 시나리오의 세 가지 사항을 처리합니다 (iregex
는 대소 문자를 구분하지 않는 합리적인 표현이며 패턴은 .*
양쪽의 고정 된 Book1 패턴 앞뒤의 모든 문자와 일치합니다. 이것은 분명히 필요한 것보다 더 많은 결과를 제공 할 수 있지만 파일을 놓치지 않을 것입니다)
주요 차이점 : 가능한 경우 /
를 사용하는 것보다 더 제한적입니다 (예 : /home
등). 관련이없는 일부 디렉토리 (/sys
, /dev
등…)로 내려갑니다.
하지만 유닉스 권한 적용 : 파일이 find
명령을 실행하는 사용자에게 액세스 (실행) 권한이없는 디렉토리에있는 경우 find
가 찾을 수 없습니다.
댓글
- iregex가 획득 한 ‘ Solaris (OS가 지정되지 않음) (및 가능하면 * BSD), GNU 확장이며 표준
find
답변
Silver Searcher 는 파일과 콘텐츠를 검색하는 매우 빠르고 편리한 유틸리티입니다.
문제를 해결하기 위해 silver searcher 명령은 다음과 같습니다.
ag -g Book1
-g PATTERN
PATTERN과 일치하는 파일 이름 인쇄
Answer
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
찾는 경우 유효하지 않다 lable, 대신 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
를 포함하지 않으면
및 /sys
, 특히 루트가 아닌 경우 화면에 오류가 발생하는 경향이 있습니다.(오류는 찾기 명령 끝에 2> /dev/null
를 추가하여 숨길 수 있습니다 (주석은 제거해야 함))
여러 파티션이 있고 그렇지 않은 경우 ” 파일이 어떤 파일에 있는지 알면 lsblk
목록을 얻을 수 있습니다 (Linux 기반 OS에서는 df
출력 구문 분석). 그렇지 않으면 옵션)을 입력하여 find : (파일에 액세스 할 수 있는지 모르는 경우 다시 루트)
$ 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
매개 변수를 조정해야 할 수 있습니다. -P는 GNU df
가 표준 POSIX 출력을 제공하도록합니다. 기타 버전에는 다른 매개 변수가 있거나 생략해야 할 수 있습니다. 맨 페이지를 읽으십시오.)
grep -F
는 스왑 파티션과 같이 반환 된 다른 항목을 제외합니다.
비 GNU 버전에서 awk는 마운트가 /dev
로 시작하는 장치를 찾아 실제 파일 시스템을 가져온 다음 마지막 파일을 인쇄합니다. d (마운트 지점)는 df
출력입니다.
또한 bourne과 같은 쉘 (ksh
및 bash
가 작동합니다. csh
변형을 사용하는 경우 시도하기 전에 스크립팅 가능한 셸 을 시작하세요)
댓글
-
grep
는 약간 시끄러울 수 있습니다. 필터링 방법에 대해 알아보십시오. 더 나은 (예제에서는 필요하지 않지만 더 일반적인 경우에는 greps 소음 수준을 낮추기 위해 조정해야 함)
답변
ag (은색 검색기) 는 파일에서 매우 빠른 검색을 제공하며 파일 이름 검색 옵션도 제공합니다.
>: time ag -g foo # uses heuristics to only look in desired locations apps/vxy/src/assets/tree-content-pages/tree-page-bird/foo-illustration.jpg real 0m0.884s user 0m0.701s sys 0m0.178s >: time find . -name "*foo*" ./apps/ssr/dist/static/media/foo-illustration.jpg ./apps/vxy/dist/static/media/foo-illustration.jpg ./apps/vxy/src/assets/tree-content-pages/tree-page-bird/foo-illustration.jpg real 0m29.744s user 0m2.108s sys 0m13.982s >: time ag -ug foo # searching all files is still faster and simpler to use then find command apps/ssr/dist/static/media/foo-illustration.jpg apps/vxy/dist/static/media/foo-illustration.jpg apps/vxy/src/assets/tree-content-pages/tree-page-bird/foo-illustration.jpg real 0m16.698s user 0m1.951s sys 0m7.119s
그래서 내 사용 사례에서 파일이 Ag에서 무시되는 파일이 아닌 경우 30 배 이상 빠릅니다.
Answer
find / -type f -iname "book[0-9].*"
Book1
, 읽을 수있는 디렉토리에 있으면find / -iname book1
에서 찾을 수 있습니다.Book1.xyz
가 아니라 실제로Book1
입니까?find
와locate
를 혼합하고 있습니다.locate
는 관대하며 일반적으로 매일 업데이트되는 데이터베이스에있는 한 일치하는 모든 항목을 찾습니다. 이 경우find
는ls
에서 사용할 패턴 유형 인 파일 glob을 찾고 있습니다. 아마도iname '*book1*'
을 의미 할 것입니다.find
가 패턴을보기 전에 셸이 확장되지 않도록하려면 패턴이 따옴표 안에 있어야합니다. 또한 많은 * nix 명령과 마찬가지로find
는 실패 할 때 실망스럽게 침묵합니다.