-pruneを使用して、クリーンアップされたディレクトリ名を見つけます。

-pruneを使用して、クリーンアップされたディレクトリ名を見つけます。

次の find コマンドを作成しました。

find ./ \( -path "*work*" -o -path "*ncvlog_lib*" \) -prune -o -type f -not
-name "*.wlf" -not -name "*.vcd" -not -name "*.sim" -not -name "*vcs*"

コマンドは1行で呼び出されます。私は読みやすさのためにここでやめました。

唯一の問題は、-type fパラメーターを指定したにもかかわらず、切り捨てられたディレクトリ名を印刷することです。出力例:

./cdl2verilog_files/test_synth/work
./cdl2verilog_files/test_synth/some_file1.txt
./cdl2verilog_files/test_synth/something_else.txt
./cdl2verilog_files/test_synth/another_file.v

workディレクトリです。その内容は出力に含まれていないため、必要に応じて剪定操作を実行できます。ただし、ディレクトリ自体は印刷されます。解決策が見つからないようです。どんなアイデアがありますか?

ところで私はtcshを使用しています。

ベストアンサー1

-pruneディレクトリの内容は除外しますが、ディレクトリ自体は除外しません。唯一の場合、-pruneこれが起こります行動コマンドとしてfind。他の操作(-execまたは-print)がある場合、切り捨てられたディレクトリ名は出力されません。したがって、-printコマンドの最後に明示的なコマンドを追加するだけですfind。たとえば、

find ./ \( -path "*work*" -o -path "*ncvlog_lib*" \) -prune -o -type f  \
  -not -name "*.wlf" -not -name "*.vcd" -not -name "*.sim" -not -name "*vcs*" \
  -print

findただし、-regex複数の述語の代わりに単一の述語を使用してコマンドを短縮/簡素化できます-name。例えば

find ./ \( -path "*work*" -o -path "*ncvlog_lib*" \) -prune -o -type f \
  -regextype awk -not -regex '.*\.(wlf|vcd|sim)$|.*vcs.*' -print

これにより、上記の最初のバージョンと同じ出力が生成されます。

おすすめ記事