テキストを含むすべてのディレクトリパスを一覧表示するには?

テキストを含むすべてのディレクトリパスを一覧表示するには?

サブディレクトリの一部であるテキストを含むすべてのディレクトリパスを一覧表示する必要があります。たとえば、テキストは次のようになります。「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*/'

おすすめ記事