0

假设我有一个 my_dirs/ 目录,insdie 那个目录我有几个并行的子目录,其中有几个文件,我想删除所有文件,除了那些有子字符串'.regions'的文件

这是我的父目录内容: 在此处输入图像描述

这是我尝试过的:

shopt -s extglob

rm -r !(./**/*.regions*)

但我收到一条错误消息:无法删除 «!(./**/*.region *) »: 文件或目录不存在。

我怎样才能做到这一点?

4

1 回答 1

0

首先,删除多个文件时要小心。实现您想要的命令是:

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 建议的文件。

于 2021-10-03T18:16:48.227 回答