0
$pwd
/tmp
$touch 1.tst 2.tst
$mkdir inner_dir
$touch inner_dir/3.tst
$find . ! -name . -prune -name '*.tst'
1.tst
2.tst

「検索」を制限して、「tst」拡張子を持つファイルの現在のディレクトリのみを検索したい (これは「ls」コマンドで実行できることはわかっているが、後で mtime などの他の「検索」フィルターを追加したい)。私の質問は、上記の「検索」がどのように機能するかです。以下が (OR オプションを使用して) 機能しないのはなぜですか?

find . ! -name . -prune -o -name '*.tst'

ありがとう。

4

1 に答える 1

1

-prune 常に値 True に評価されます。ディレクトリの場合、現在のパス名の下降を停止します。-depth フラグが指定されている場合、-prune フラグは無視されます。

遊んでみると何をしているかわかると思います。

例えば

find . ! -name . -prune

与える

./1.tst
./2.tst
./d

プルーンのために ./d には入りません -- 「降下を停止します ...」。残ったものは、-name '*.tst' によってフィルタリングされ、最上位ディレクトリのリスト ファイルだけになります。

HTH

于 2013-03-11T00:43:26.917 に答える