使用sudo rm -r时,如何删除除以下文件外的所有文件?
textfile.txt
backup.tar.gz
script.php
database.sql
info.txt
使用sudo rm -r时,如何删除除以下文件外的所有文件?
textfile.txt
backup.tar.gz
script.php
database.sql
info.txt
当前回答
rm !(textfile.txt|backup.tar.gz|script.php|database.sql|info.txt)
extglob(扩展模式匹配)需要在BASH中启用(如果它没有启用):
shopt -s extglob
其他回答
因为没人提过
把不想删除的文件复制到安全的地方 删除所有文件 将复制的文件移回原位
找到。| 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。
我选择将备份目录放在根目录下,因为如果您试图从根目录中递归地删除所有内容,那么您的系统将会出现大问题。
当然,还有更优雅的方法可以做到这一点,但这个方法非常简单。
使文件不可变。即使root用户也不允许删除它们。
chattr +i textfile.txt backup.tar.gz script.php database.sql info.txt
rm *
所有其他文件都已删除。 最终你可以将它们重置为可变的。
chattr -i *
我正在寻找的答案是运行脚本,但我希望避免删除脚本本身。因此,如果有人正在寻找类似的答案,请执行以下步骤。
创建一个.sh文件并编写以下代码:
cp my_run_build.sh ../../
rm -rf * cp
../../my_run_build.sh .
/*amend rest of the script*/
只是:
rm $(ls -I "*.txt" ) #Deletes file type except *.txt
Or:
rm $(ls -I "*.txt" -I "*.pdf" ) #Deletes file types except *.txt & *.pdf