如果我运行这个命令......
sudo find /storage -name "*~" -or -name ".*~" -or -name "#.*#"
-or -name ".DS_Store" -or -name "Thumbs.db"
... 它如预期的那样给出了匹配文件的列表。但是,如果我使用此命令...
sudo find /storage -name "*~" -or -name ".*~" -or -name "#.*#"
-or -name ".DS_Store" -or -name "Thumbs.db" -exec rm -v {} \;
... 什么都没有删除。同样,使用 echo 时,什么都没有打印出来...
sudo find /storage -name "*~" -or -name ".*~" -or -name "#.*#"
-or -name ".DS_Store" -or -name "Thumbs.db" -exec echo {} \;
怎么会?
答案1
您必须正确地对您的表情进行分组 - 目前-exec
仅适用于最后一个-or
分支。
sudo find /storage \( -name "*~" -or -name ".*~" -or -name "#.*#" -or -name ".DS_Store" -or -name "Thumbs.db" \) -exec rm -v {} \;
只要记住,这-exec
只是一个表达式,如果命令返回零,则返回 true,因此运行该命令只是一个副作用。
答案2
find Documents/ -iname '*.txt' -exec echo {} \;
-or -iname '*.cpp' -exec echo {} \;
但是这有效。希望这能对你有所帮助。如果你将 exec 与 all -or 分开使用,该命令将有效。
不过,我已经找到了解决您问题的方法。
for file in $(find Documents/ -iname '*.txt'
-or -iname '*.cpp'| awk '{print $1}'); do rm $file; done