在Linux脚本中,如何删除所有文件&目录中只有一个目录?

时间:2015-02-18 09:43:30

标签: linux shell

在shell脚本中,我想删除当前目录中的所有文件和目录,但只删除一个文件。 我用了

 ls | grep -v 'nameoffiletokeep' | xargs rm

删除文件,但不删除目录。

2 个答案:

答案 0 :(得分:2)

find . -mindepth 1 -maxdepth 1 ! -iname nameoffiletokeep -print0| xargs -0 rm -rf;

这将查找当前工作目录的直接子目录中名为nameoffiletokeep的所有文件和目录,并将它们全部删除(递归目录),而不管前导点(例如.hidden,如果您在文件名中使用了rm -rf *),空格或其他元字符,则会遗漏这些内容。

我已使用-inamenameoffiletokeep进行不区分大小写的匹配,但如果您想要区分大小写,则应使用-name。选择应取决于基础文件系统行为,以及您对要保护的文件名的字母大小写的认识。

答案 1 :(得分:1)

如果您使用的是bash,则可以使用扩展的globbing:

shopt -s extglob
rm -fr !(nameoffiletokeep)

在zsh中,同样的想法是可能的:

setopt extended_glob
rm -fr ^nameoffiletokeep