删除以以下内容开头但不包含以下内容的文件

删除以以下内容开头但不包含以下内容的文件

我试图一次删除很多文件,但需要具体说明不要删除我实际需要的任何文件。

我有大量损坏的文件掌握-但有以以下开头的有效文件硕士-2018

所以,我想做一些类似的事情

rm -rf master-* --exclude master-2018*

我需要的是可能吗?

答案1

是的,您可以使用多种模式find

$ find -name 'master-*' \! -name 'master-2018*' -print0 -prune |
     xargs -0 echo rm -fr

echo如果您对试运行满意,请删除)

如果您只想从当前目录中删除文件,则应该-maxdepth 1在后面添加一个谓词,即但不删除.findmaster-1991subdir/master-1991

答案2

在bash中:

shopt -s extglob
echo rm master-!(2018*)

echo如果看起来正确,请将其删除。

上面使用 bash 的扩展通配工具来匹配以 开头master-但没有2018紧随其后的文件,然后跟随任何内容 ( *)。

答案3

如果您要删除的所有文件都具有类似 master-YYYY* 的模式,您可以使用这些模式:

rm -rf master-???[0-79]*
rm -rf master-??[02-9]*
rm -rf master-?[1-9]*
rm -rf master-[013-9]*

目标是省略年份数字中的数字,因此在 master 之后的第一个位置 - 我们需要省略(不要删除)数字 2,在第二个位置上省略数字 0,在第三个位置上省略数字 1,在第四个位置上 - 数字 8我在一分钟前尝试过,只运行其中的前两个就足够了。

第二种方法:您可以将 master-2018 移动到另一个目录,例如 /tmp,然后使用 master-* 删除所有内容,然后从 tmp 移回 master-2018。

mkdir /tmp/backup
mv -r master-2018* /tmp/backup
rm -rf master-*
mv -r /tmp/backup/* .

相关内容