如何删除文件夹中的所有文件,Music -subfolder除外?

时间:2009-01-17 16:53:47

标签: shell terminal

复制

  

Unable to remove everything else in a folder except FileA

我猜它与此略有相似: 删除[^音乐]

然而,它不起作用。

3 个答案:

答案 0 :(得分:4)

将以下命令放到〜/ .bashrc

shopt -s extglob 

您现在可以通过

删除文件夹中除音乐文件夹以外的所有内容
rm -r !(Music)

请小心命令。 它很强大,但也很危险。

我建议始终使用命令

进行测试
echo rm -r !(Music)

答案 1 :(得分:2)

命令

rm (ls | grep -v '^Music$')

应该有效。如果您的某些“文件”也是子目录,那么您也希望以递归方式删除它们:

rm -r (ls | grep -v '^Music$')

警告rm -r可能很危险,您可能会意外删除大量文件。如果您想确认要删除的内容,请尝试查看

的输出
ls | grep -v '^Music$'

解释

  • ls命令列出目录内容;没有参数,它默认为当前目录。
  • 管道符号|将输出重定向到另一个命令;当ls的输出以这种方式重定向时,它会按行显示文件名,而不是像在交互式终端上键入ls时看到的列格式。
  • grep命令匹配模式的行; -v开关意味着打印 与模式匹配的行。
  • 模式^Music$表示匹配以音乐开头和结尾的行 - 即只有字符串音乐;使用^开关也可以实现$(行首)和-x(行尾)字符的效果,如grep -vx Music中所示。
  • 语法command (subcommand)是获取一个命令的输出并将其作为命令行参数传递给另一个命令的方法。
  • rm命令删除文件。默认情况下,它不会删除目录,但-r(“递归”)选项会更改目录。

您可以点击man command来了解这些命令及其他内容,其中command是您想要了解的内容。

答案 2 :(得分:0)

所以我一直在寻找一种方法来删除目录中的所有文件,除了一些目录和文件,我想保留。经过多次搜索,我设计了一种方法,使用find。

find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;

基本上它使用正则表达式来选择要从结果中排除的目录,然后删除剩余的文件。只是想把它放在这里以防其他人需要它。