私はファイルやフォルダがどこにあるのか覚えていないときにこのコマンドを使用します。locate
(このコマンドはより多くの項目を見つけて、より多くの候補を受け入れるようです。
しかし、私が間違っている可能性があります。)find
しかし、当然、次のような反応がたくさん出てきました。
locate clang
/data/sauvegardes/dev/Java/Experimentations/Angular4/bikes/node_modules/blocking-proxy/.clang-format
/data/sauvegardes/dev/Java/Experimentations/Angular4/bikes/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
/data/sauvegardes/dev/Java/Experimentations/Angular6/ng6-proj/node_modules/blocking-proxy/.clang-format
/data/sauvegardes/dev/Java/Experimentations/Angular6/ng6-proj/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
/data/sauvegardes/dev/Java/Experimentations/blog-demo/node/node_modules/npm/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
/data/sauvegardes/dev/Java/Experimentations/blog-demo/node_modules/blocking-proxy/.clang-format
/data/sauvegardes/dev/Java/Experimentations/blog-demo/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
/data/sauvegardes/dev/Java/Experimentations/ol-ext-angular/.metadata/.plugins/ts.eclipse.ide.server.nodejs.embed.win32.win32.x86_64/node-v6.9.4-win-x64/node_modules/npm/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
(201 responses)
このコマンドをパイプして、を使用して、名前にdirname
その単語を含むディレクトリのみを一覧表示するか、その単語を含む1つ以上のファイルを渡します。sort
uniq
locate clang | xargs -L1 dirname | sort | uniq
効果があります...
/home/lebihan/dev/Java/comptes-france/metier-et-gestion/AdapterInboundWebEtude/etude/node_modules/node-gyp/gyp/tools/Xcode/Specifications
/home/lebihan/dev/Java/comptes-france/metier-et-gestion/AdapterInboundWebEtude/etude/node/node_modules/npm/node_modules/node-gyp/gyp/tools/Xcode/Specifications
/usr/include/boost/align/detail
/usr/include/boost/config/compiler
/usr/include/boost/predef/compiler
/usr/lib/linux-kbuild-6.1/scripts
/usr/lib/llvm-14/lib
/usr/lib/postgresql/14/lib/bitcode/postgres/commands
/usr/lib/x86_64-linux-gnu
/usr/local/go/misc/ios
/usr/local/go/src/debug/dwarf/testdata
/usr/local/go/src/debug/elf/testdata
/usr/local/go/src/debug/macho/testdata
/usr/share/doc
/usr/share/doc/libclang1-14
/usr/share/doc/libclang-cpp14
(108 responses)
しかし実際にLinux同じことをより簡単にできるコマンドがありますか?
答え1
さて、GNUシステムを使用している場合は、GNUを使用して出力フォーマットを指定できfind
ます-printf
。sort
特定のタスクに対して別々のコマンドを使用することは、KISSの概念をある程度満足させるので、それを維持することをお勧めします。しかし、sort
存在するので-u
省略するuniq
ことができます。
find . -name '*targetstring*' -printf '%h\n' | sort -u
ディレクトリ名の改行を処理するには、少しの労力が必要です。
find . -name '*targetstring*' -printf '%h\0' |
LC_ALL=C sort -zu |
tr '\0' '\n'
(LC_ALL=C
また、有効なテキストで構成されていない、またはユーザーのロケール内の同じ順序の文字を含むファイルパスの問題を回避します。)
デフォルト名だけでなく、パスのどこにでも検索するには、次のよう-name
に置き換えます。-path
targetstring
-z
-printf
GNU拡張です。
答え2
zsh
殻に
(){ print -rC1 -- ${(u)@}; } **/*clang*(ND:h)
.を含む名前がprint
r
列に1
C
表示されます。u
h
clang
匿名関数を次のようにしますprintu
(forユニークな印刷)それらの1つを教えてください:
printu() print -rC1 -- "${(u)@}"
あなたがそれを書くことができます:
printu **/*clang*(ND:h)
ファイルヘッダーの場合道(デフォルト名だけでなく)以下が含まれますclang
。
set -o extendedglob
printu **/*~^*clang*(ND:h)
(~
そこはどこにいますか?とは別に拡散演算子^
といいえ拡散演算子)。
答え3
私が知っている限り、あなたの要件を満たす項目はまだありません。ただし、ソリューションを作成できる場合は、それをコマンド(関数またはスクリプト)に変換できます。
.bashrc
たとえば、これはあなたまたはそれに対応する定義に含めることができますdlocate
。
dlocate() {
locate -0eb -- "$1" |
while IFS= read -d '' -r x; do [ -d "$x" ] && printf '%s\n' "$x"; done
}
あるいは、そのスクリプトを作成して、ディレクトリにリストされているディレクトリの1つに入れることもできます$PATH
(私は通常$HOME/bin
またはを使用します/usr/local/bin
)。
いずれにしても、このコマンドは指定された名前のフラグメントを含むディレクトリをdlocate
データベースから取得します。locate
たとえば、次を含むすべてのディレクトリ名と一致しますnet
。
dlocate net
私のシステムには、次のディレクトリが含まれています。
/usr/include/net
/usr/share/doc/update-inetd
/usr/share/pixmaps/nethack
このループはそのフィルタに一致するすべてのファイルとディレクトリを返すため、while
ディレクトリ以外のすべての項目を除外する必要があります。locate
ディレクトリへのシンボリックリンクを見つけましたが、条件付きチェーン[ -d "$x" ]
に展開してそれを除外できます。[ -d "$x" ] && [ ! -h "$x" ]