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

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

当前回答

删除除file.name以外的所有内容:

ls -d /path/to/your/files/* |grep -v file.name|xargs rm -rf

其他回答

假设具有这些名称的文件存在于目录树中的多个位置,并且您希望保存所有这些文件:

find . -type f ! -regex ".*/\(textfile.txt\|backup.tar.gz\|script.php\|database.sql\|info.txt\)" -delete

您可以使用两个命令序列来完成此操作。 首先定义一个数组,其中包含你不想排除的文件的名称:

files=( backup.tar.gz script.php database.sql info.txt )

在此之后,循环遍历你想要排除的目录中的所有文件,检查文件名是否在你不想排除的数组中;如果不是,然后删除文件。

for file in *; do
  if [[ ! " ${files[@]} " ~= "$file"  ]];then
    rm "$file"
  fi
done

在Bash中可以使用GLOBIGNORE环境变量。

假设您想删除除php和sql之外的所有文件,那么您可以执行以下操作-

export GLOBIGNORE=*.php:*.sql
rm *
export GLOBIGNORE=

像这样设置GLOBIGNORE会忽略php和sql中的通配符,比如“ls *”或“rm *”。因此,在设置变量后使用“rm *”将只删除txt和tar.gz文件。

我相信你可以使用

rm -v !(filename)

除了文件名,所有其他文件将删除在该目录中,并确保您正在使用它

删除除file.name以外的所有内容:

ls -d /path/to/your/files/* |grep -v file.name|xargs rm -rf