使用sudo rm -r时,如何删除除以下文件外的所有文件?

textfile.txt
backup.tar.gz
script.php
database.sql
info.txt

当前回答

找到。| grep -v "排除的文件条件" | xargs rm

这将列出当前目录中的所有文件,然后列出所有不符合条件的文件(注意它匹配目录名),然后删除它们。

更新:根据你的编辑,如果你真的想删除当前目录中除了你列出的文件之外的所有内容,这可以使用:

mkdir /tmp_backup && mv textfile.txt backup.tar.gz script.php database.sql info.txt /tmp_backup/ && rm -r && mv /tmp_backup/* . && rmdir /tmp_backup

它将创建一个备份目录/tmp_backup(您有根权限,对吧?),将您列出的文件移动到该目录,递归地删除当前目录中的所有内容(您知道您在正确的目录,对吗?),将/tmp_backup中的所有内容移回当前目录,最后删除/tmp_backup。

我选择将备份目录放在根目录下,因为如果您试图从根目录中递归地删除所有内容,那么您的系统将会出现大问题。

当然,还有更优雅的方法可以做到这一点,但这个方法非常简单。

其他回答

找到。| grep -v "排除的文件条件" | xargs rm

这将列出当前目录中的所有文件,然后列出所有不符合条件的文件(注意它匹配目录名),然后删除它们。

更新:根据你的编辑,如果你真的想删除当前目录中除了你列出的文件之外的所有内容,这可以使用:

mkdir /tmp_backup && mv textfile.txt backup.tar.gz script.php database.sql info.txt /tmp_backup/ && rm -r && mv /tmp_backup/* . && rmdir /tmp_backup

它将创建一个备份目录/tmp_backup(您有根权限,对吧?),将您列出的文件移动到该目录,递归地删除当前目录中的所有内容(您知道您在正确的目录,对吗?),将/tmp_backup中的所有内容移回当前目录,最后删除/tmp_backup。

我选择将备份目录放在根目录下,因为如果您试图从根目录中递归地删除所有内容,那么您的系统将会出现大问题。

当然,还有更优雅的方法可以做到这一点,但这个方法非常简单。

rm !(textfile.txt|backup.tar.gz|script.php|database.sql|info.txt)

extglob(扩展模式匹配)需要在BASH中启用(如果它没有启用):

shopt -s extglob

如果你正在使用zsh,我强烈推荐。

rm -rf ^file/folder pattern to avoid

与extended_glob

setopt extended_glob
rm -- ^*.txt
rm -- ^*.(sql|txt)

试着这样做:

rm -r !(Applications|"Virtualbox VMs"|Downloads|Documents|Desktop|Public)

但是带空格的名字(一如既往)很难取。也尝试用Virtualbox\ VMs代替引号。它总是删除该目录(Virtualbox vm)。

只是:

rm $(ls -I "*.txt" ) #Deletes file type except *.txt

Or:

rm $(ls -I "*.txt" -I "*.pdf" ) #Deletes file types except *.txt & *.pdf