サブディレクトリの一部であるテキストを含むすべてのディレクトリパスを一覧表示する必要があります。たとえば、テキストは次のようになります。「tpcc」 私は以下を含む2つのパスを持っています:TPCC次のように:
/home/arghy/sampledir1/**tpcc**-uva/subdir1/subdir2
/home/arghy/sampledir2/**tpcc**-postgre/subdir1/subdir2
コマンドを使用してこれらのパスを一覧表示し、上記のテキストで「tpcc」を提供したいと思います。このコマンドは何ですか?
ベストアンサー1
特定の文字列を含む現在のディレクトリの下のすべてのディレクトリパス名を見つけるには、次の手順を実行しますtpcc
。
find . -type d -path '*tpcc*'
述語は、見つかったパス名-path
に対してパターンを照合し、パターンがfind
一致すると現在のパス名が印刷されます。
もしあなたならいいえ現在のパス名の末尾でパターンを一致させるには、代わりに*tpcc*/*
asパターンを使用します。/
後で一致すると、厳密なディレクトリ検索がtpcc
発生します。find
下にすべての名前にtpcc
。
-type d
ディレクトリ検索のみ可能です。
これをシンプルで使いやすいシェル関数でパッケージしますか?
pathfind () {
case $# in
1) # only a string was given
searchpath=.
searchstring=$1
;;
2) # search path and string was given
searchpath=$1
searchstring=$2
;;
*) # anything else is an error
echo 'Expected one or two arguments' >&2
return 1
esac
find "$searchpath" -type d -path "*$searchstring*"
}
次のように使用できます。
pathfind tpcc
または
pathfind /some/path tpcc
または
pathfind /some/path 'tpcc*/'