我构造了以下查找命令:
find ./ \( -path "*work*" -o -path "*ncvlog_lib*" \) -prune -o -type f -not
-name "*.wlf" -not -name "*.vcd" -not -name "*.sim" -not -name "*vcs*"
该命令在一行中调用。为了可读性,我在这里打破了界限。
唯一的问题是,尽管提供了 -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 。
-prune
排除目录的内容,但不排除目录本身。如果-prune
是命令中的唯一操作,则会发生这种情况find
。如果有任何其他操作(例如-exec
或-print
),它不会输出修剪后的目录名称。因此,您只需在命令-print
末尾添加一个显式。find
例如:find
顺便说一句,您可以通过使用单个-regex
谓词而不是多个谓词来缩短/简化命令-name
。例如这会产生与上述第一个版本相同的输出。
我认为在你的情况下
is ambigus :
-o
意思是“或”,当find
找到一个目录时,-prune
为真,所以-type f
不被评估