事实上,我认为这种要求太过分了。
但是我想删除所有以“.sh”为扩展名的文件(仅限当前文件夹),我可以使用以下命令执行此操作:
find . -maxdepth 1 -type f -name '*.sh' -exec rm {} +
但我仍然希望保持当前文件夹中的文件“cron.sh”不受影响。
我如何在单个命令行中实现这一点?
答案1
您可以使用-not
:
find . -maxdepth 1 -type f -name '*.sh' -not -name cron.sh -delete
此外,GNUfind
具有-delete
比 更易于使用的选项rm -rf
。
重要的:始终放在-delete
最后。如以下说明man find
:
警告:请不要忘记 find 命令行被评估为一个表达式,因此首先输入 -delete 将使 find 尝试删除您指定的起点以下的所有内容。
或者,你可以使用 shell 循环(但不要这样做,find
上面的命令效率更高):
for f in *.sh; do [ "$f" = "cron.sh" ] || rm "$f"; done
答案2
find
另一种方法,但比这个好例子慢特登是使用mv
和rm
命令与和运算符链接起来。
mv cron.sh cron.sh.safe && rm *.sh && mv cron.sh.safe cron.sh
如果您有任何名为 something.sh 的目录,这将会产生抱怨,但不会删除它们。