删除开头但不包含的文件

Dan*_*mer 6 linux filenames rm

我正在尝试一次删除大量文件,但需要具体说明不要删除我实际需要的任何文件。

我有一吨重的是启动文件损坏主-但也有这样开始的有效文件主-2018

所以,我想做类似的事情

rm -rf master-* --exclude master-2018*
Run Code Online (Sandbox Code Playgroud)

那是我需要的可能吗?

mos*_*svy 18

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

$ find -name 'master-*' \! -name 'master-2018*' -print0 -prune |
     xargs -0 echo rm -fr
Run Code Online (Sandbox Code Playgroud)

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

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

  • @Sparhawk 是的,`find` 和 `xargs` 是并行运行的。`find ... -exec cmd {} +`(最后有 `+`)将尽可能多的参数放入 `cmd`(就像 `xargs`),但是 `find` 仍然需要等待它完成,然后再继续。`find -print0 | 的缺点 xargs -0` 不是标准的——尽管它得到了很好的支持(GNU、*BSD、busybox、android、solaris,如果与 gxargs 一起使用)。 (4认同)
  • 但是 OP 正在使用 `rm -rf`,`-delete` 仅在目录为空时才有效。 (2认同)
  • @Sparhawk 效率。`-exec` 将为每次命中启动一个新进程,而 `xargs` 只会启动一个额外进程。 (2认同)

Jef*_*ler 11

在 bash 中:

shopt -s extglob
echo rm master-!(2018*)
Run Code Online (Sandbox Code Playgroud)

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

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