나는하고 있었다
find . -iname '*sitesearch*' | grep demo
파일이 이어야 한다는 것을 알고 있는데 some/path/SiteSearch/demo/SiteSearch.html
누군가가 파일을 로 넣어서 some/path/SiteSearch/demo/index.html
파일을 찾을 수 없다는 것이 밝혀졌습니다.
검색을 수행하는 더 좋은 방법이 있습니까?
예를 들어, 이 예에서는
find . -iname '*demo*' | grep -i sitesearch
그것을 찾을 것입니다. 하지만 항상 그것이 어떤 가능성인지 생각하고 어떤 패턴을 사용해야 할지 파악하고 싶지는 않습니다. 파일과 경로에 이 두 키워드가 모두 있을 때마다 인쇄할 수 있는 방법을 원합니다. 예를 들어, ls
모든 파일에 대한 각 줄의 전체 경로를 제공하는 방법이 있다면 다음과 같이 할 수 있습니다.
ls --some-flags | grep -i demo | grep -i sitesearch
아니면 다른 방법/더 나은 방법일 수도 있습니다.
답변1
에서는 두 패턴(또는 보다 일반적으로 여러 조건)을 결합할 수 있습니다 find
.
find . -ipath '*sitesearch*' -ipath '*demo*'
또는 정규식 구문을 선호하는 경우
find . -iregex '.*sitesearch.*' -iregex '.*demo.*'
" ls
각 줄의 전체 경로"(여기서 분명히 필요한 디렉토리를 재귀적으로 탐색하는 것 포함)는 입니다 find
. 실행할 수는 있지만 find | grep -i demo | grep -i sitesearch
모든 작업을 수행하는 것이 find
아마도 훨씬 더 빠를 것입니다 .
이 작업을 자주 수행하는 경우 함수로 만들 수 있습니다( ~/.kshrc
또는 ~/.bashrc
안에 넣습니다 ~/.zshrc
).
findallof () {
typeset -a pred
pred=(.)
typeset x
for x do
pred=("${pred[@]}" -ipath "*$x*")
done
find "${pred[@]}"
}
또한 다음을 사용하여 이름으로 파일을 검색할 수 있습니다.locate
(Linux에서도 여러 구현이 있으므로 시스템의 매뉴얼 페이지를 확인하십시오.)
locate -i sitesearch | grep -i demo
locate
이는 인덱스가 쿼리되기 때문에 큰 디렉터리 트리를 검색하는 것보다 빠릅니다 (비록 대소문자를 구분하지 않는 검색은 그다지 빠르지 않은 경향이 있음). 그러나 인덱스는 일반적으로 밤에만 다시 작성되므로 오늘 생성된 파일은 표시되지 않습니다. 공개적으로 읽을 수 있는 디렉토리에 없는 파일은 구현에 따라 색인화될 수도 있고 그렇지 않을 수도 있습니다( /usr/bin/locate
setuid 루트 바이너리인지 확인하십시오. 그렇다면 개인 파일은 색인화되고 locate
명령은 액세스할 수 있는 파일만 표시합니다).