删除子文件夹中除文件 X、Y 和 Z 之外的所有文件和子文件夹

删除子文件夹中除文件 X、Y 和 Z 之外的所有文件和子文件夹

我有很多文件特定文件夹中的子文件夹,我想删除所有这些子文件夹;但是,我想保留文件 X、Y 和 Z。

有没有办法我可以做类似的事情:

rm * | but NOT grep | X or Y or Z

答案1

代替使用rm,使用可能更方便寻找。像这样的命令会删除除名为“file”的文件之外的所有内容

find . \! -name 'file' -delete

许多版本应该能够支持通配和正则表达式匹配。

您也可以将 find 的输出通过管道传输到 rm

find . \! -name '*pattern*' -print0 | xargs --null rm 

答案2

使用 zsh、with setopt EXTENDED_GLOB、使用~运算符 (除了

rm -- *~(x|y|z)

^运算符(否定):

rm -- ^(x|y|z)

但是,您可能应该将文件移动到其他地方,然后删除所有内容。就手指滑动而言,例如过早按回车键,它要安全得多。

答案3

bash 的更高版本有extglobshell 选项,它为您提供了执行您想要的操作的语法(检查“路径名扩展”下的手册页以查看您安装的版本是否有它):

$ shopt -s extglob  # turn on extended globbing
$ rm !(X|Y|Z)

为了进行测试,我建议您首先替换rm为,echo看看要删除的文件列表是否是您所期望的。

答案4

移动您想要保留的文件。上一级,删除文件夹。重新创建文件夹并将这些文件移回。

相关内容