我试图一次删除很多文件,但需要具体说明不要删除我实际需要的任何文件。
我有大量损坏的文件掌握-但有以以下开头的有效文件硕士-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
在后面添加一个谓词,即但不删除.find
master-1991
subdir/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/* .