答案 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 {} \;
基本上它使用正则表达式来选择要从结果中排除的目录,然后删除剩余的文件。只是想把它放在这里以防其他人需要它。