임의의 파일/디렉터리 이름을 검색하고 싶지만 동일한 위치에 검색 문자열이 포함된 파일 경로만 나열하고 싶습니다. 특히 디렉터리의 모든 파일이 검색 문자열과 일치하는 것은 아닙니다.
다음은 예시 locate -i flatpak
목록입니다.
/etc/flatpak
/etc/dbus-1/system.d/org.freedesktop.Flatpak.SystemHelper.conf
/etc/flatpak/remotes.d
/etc/profile.d/flatpak.sh
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/74
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/75
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/76
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/77
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/78
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/79
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/7a
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/7b
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/7c
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/7d
/var/lib/flatpak
/var/lib/flatpak/.changed
/var/lib/flatpak/.removed
/var/lib/flatpak/app
/var/lib/flatpak/appstream
/var/lib/flatpak/exports
/var/lib/flatpak/repo
/var/lib/flatpak/runtime
하지만 나는 다음과 같은 검색 결과를 원합니다.
/etc/flatpak
/etc/dbus-1/system.d/org.freedesktop.Flatpak.SystemHelper.conf
/etc/profile.d/flatpak.sh
/home/simon/.cache/gnome-software/flatpak
/var/lib/flatpak
이 목적에 가장 적합한 도구는 무엇입니까? locate
, find
, fd-find
?
답변1
flatpak
다른 경로 구성 요소가 아닌 파일 이름에서만 검색하려는 것처럼 들리므로 -b
/ --basename
옵션을 사용할 수 있습니다.
그래서:
locate -ib flatpak
-r
또 다른 접근 방식은 / 옵션을 사용 --regex
하고 다음과 같이 작성하는 것입니다.
locate -ir 'flapak[^/]*$'
파일 경로 끝 부분을 제외하고 그 flatpak
뒤에는 원하는 수의 문자가 올 수 있습니다 ./
그러나 이것은 놓칠 수도 있습니다 flatpak
.
답변2
sed
다음을 사용하여 패턴 뒤의 모든 항목을 제거 할 수 있습니다 flatpak
. 그런 다음 출력을 정렬하고 고유한 줄만 인쇄할 수 있습니다.
locate -i flatpak | sed -E -e 's/(flatpak\/?).*/\1/i' -e 's/\/$//' | sort | uniq
답변3
find
파일 시스템 전체에서 이름 flatpack
에 이 문자열이 포함된 파일 이름을 찾는 데 사용됩니다 .
find / -name '*flatpack*'
find
구현에 하나가 있는 경우 대소문자를 구분하지 않고 검색하는 -iname
대신 이를 사용할 수 있습니다 -name
. 일반 파일만 검색하려는 경우에도 작동합니다 -type f
(귀하의 예에는 다음을 찾는 것이 포함됩니다).어느파일 형식이므로 무시해야 합니다):
find / -type f -iname '*flatpack*'
find
이로 인해 액세스 권한이 없는 디렉토리에 들어가려고 할 때 "권한 거부" 오류가 많이 발생할 수 있습니다. 이를 방지하려면 find
다음과 같이 GNU를 사용할 수 있습니다.
find / ! -readable -prune -o -iname '*flatpack*' -print
를 사용하는 것보다 속도는 느리지 locate -ib flatpack
만 항상 최신 결과를 제공합니다. 사용 중인 데이터는 locate
매일 또는 매주 수집되며, 모든 사용자가 읽을 수 없는 경로는 포함되지 않습니다.