指定されたファイル名を持つファイルを含まないすべてのディレクトリのリスト

指定されたファイル名を持つファイルを含まないすべてのディレクトリのリスト

すべてのディレクトリをどのようにリストしますか?いいえ指定されたファイル名を持つファイルはありますか?たとえば、このツリーが与えられた場合

/
  /a
     README
     file001
     file002
  /b
     README
     file001
  /c
     file003

これを行うディレクトリを一覧表示したいと思います。いいえというファイルがありますREADMEが、この場合はディレクトリになります/c。どうすればいいですか?findたとえば、構文を考えることはできません。

ベストアンサー1

findGNUなどの実装がパラメータの挿入を許可すると仮定するfindと、次のようになります。{}-exec

$ find . -type d \! -exec test -e '{}/README' \; -print

または問題の挿入なしで:

$ find . -type d ! -exec sh -c 'test -e "$1"/README' sh {} \; -print

はい

ここで、1/1~5/5 ディレクトリには README があり、残りのディレクトリは空です。

$ tree 
.
|-- 1
|   `-- 1
|       `-- README
|-- 10
|   `-- 10
|-- 2
|   `-- 2
|       `-- README
|-- 3
|   `-- 3
|       `-- README
|-- 4
|   `-- 4
|       `-- README
|-- 5
|   `-- 5
|       `-- README
|-- 6
|   `-- 6
|-- 7
|   `-- 7
|-- 8
|   `-- 8
`-- 9
    `-- 9

findこのバージョンのコマンドを実行すると、次のようになります。

$ find . -type d \! -exec test -e '{}/README' \; -print
.
./10
./10/10
./7
./7/7
./9
./9/9
./6
./6/6
./5
./8
./8/8
./4
./1
./3
./2

引用する

おすすめ記事