其实这种要求太多了我觉得。
但我想删除与扩展名“.sh”(仅限当前文件夹)匹配的所有文件,我可以使用以下命令执行此操作:
find . -maxdepth 1 -type f -name '*.sh' -exec rm {} +
Run Code Online (Sandbox Code Playgroud)
但我仍然想保持当前文件夹中的文件“cron.sh”不受影响。
如何在单个命令行中实现这一点?
您可以使用-not:
find . -maxdepth 1 -type f -name '*.sh' -not -name cron.sh -delete
Run Code Online (Sandbox Code Playgroud)
此外,GNUfind有一个-delete选项,它比rm -rf.
重要提示:始终放在-delete最后。如中所述man find:
警告:不要忘记 find 命令行被评估为表达式,因此将 -delete 放在首位将使 find 尝试删除您指定的起点以下的所有内容。
或者,您可以使用 shell 循环(但不要这样做,find上面的命令效率更高):
for f in *.sh; do [ "$f" = "cron.sh" ] || rm "$f"; done
Run Code Online (Sandbox Code Playgroud)