假设我有一个 my_dirs/ 目录,insdie 那个目录我有几个并行的子目录,其中有几个文件,我想删除所有文件,除了那些有子字符串'.regions'的文件
这是我尝试过的:
shopt -s extglob
rm -r !(./**/*.regions*)
但我收到一条错误消息:无法删除 «!(./**/*.region *) »: 文件或目录不存在。
我怎样才能做到这一点?
首先,删除多个文件时要小心。实现您想要的命令是:
find my_dirs -type f ! -name "*.regions*" -delete
“-delete”必须放在最后,否则它会删除它找到的所有内容
这将探索 中的所有子目录my_dirs
,找到名称-type f
中不 ( !
) 包含“.regions” ( "*.regions*"
) 的文件 ( ),然后删除 ( -delete
) 它们。
我建议先运行这个:find my_dirs -type f ! -name "*.regions*"
,所以它不会删除任何东西,你可以检查文件是否正确。
编辑:已添加-type f
,因此它仅针对 Philippe 建议的文件。