任意のファイル/ディレクトリ名を検索したいが、同じ場所に検索文字列を含むファイルパスのみをリストしたいと思います。特に、ディレクトリ内のすべてのファイルが検索文字列と一致するわけではありません。
以下は例の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
実装に1つがある場合は、大文字と小文字を区別せずに検索する-iname
代わりにそれを使用できます-name
。通常のファイルのみを検索したい場合にも機能します-type f
(あなたの例には次のものが含まれます)。どのファイル形式なので無視する必要があります):
find / -type f -iname '*flatpack*'
find
これにより、アクセス権のないディレクトリに入ろうとすると、「権限の拒否」エラーが発生する可能性があります。これを防ぐには、find
次のようにGNUを使用できます。
find / ! -readable -prune -o -iname '*flatpack*' -print
を使用するよりも速度は遅いですが、locate -ib flatpack
常に最新の結果を提供します。使用中のデータはlocate
毎日または毎週収集され、すべてのユーザーが読めないパスは含まれません。