复制
我猜它和这个有点相似:删除 [^Music]
但是,它不起作用。
将以下命令放入您的 ~/.bashrc
shopt -s extglob
您现在可以通过以下方式删除文件夹中除“音乐”文件夹外的所有其他内容
rm -r !(Music)
请注意命令。它很强大,但也很危险。
我建议始终使用命令对其进行测试
echo rm -r !(Music)
命令
rm (ls | grep -v '^Music$')
应该管用。如果您的某些“文件”也是子目录,那么您也想递归删除它们:
rm -r (ls | grep -v '^Music$')
警告:rm -r
可能很危险,您可能会意外删除大量文件。如果您想确认要删除的内容,请尝试查看
ls | grep -v '^Music$'
说明:
ls
命令列出目录内容;没有参数,它默认为当前目录。|
将输出重定向到另一个命令;当以这种方式重定向的输出时,它每行打印一个文件名,而不是像在交互式终端上ls
键入时所看到的列格式。ls
grep
命令匹配模式的行;该-v
开关表示打印与模式不匹配的行。^Music$
意思是匹配以Music开头和结尾的一行——即只匹配字符串Music;^
(行首)和(行尾)字符的效果$
也可以通过-x
switch来实现,如grep -vx Music
.command (subcommand)
是 fish 获取一个命令的输出并将其作为命令行参数传递给另一个命令的方式。rm
命令删除文件。默认情况下,它不会删除目录,但-r
("recursive") 选项会改变它。您可以通过键入来了解这些命令以及更多信息,您想了解的内容man command
在哪里。command
所以我一直在寻找一种方法来删除目录中的所有文件,除了一些我想保留的目录和文件。经过大量搜索后,我设计了一种使用 find 的方法。
find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;
本质上,它使用正则表达式来选择要从结果中排除的目录,然后删除剩余的文件。只是想把它放在这里以防其他人需要它。