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

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

当前回答

我正在寻找的答案是运行脚本,但我希望避免删除脚本本身。因此,如果有人正在寻找类似的答案,请执行以下步骤。

创建一个.sh文件并编写以下代码:

    cp my_run_build.sh ../../ 
    rm -rf * cp  
    ../../my_run_build.sh . 
    /*amend rest of the script*/

其他回答

我相信你可以使用

rm -v !(filename)

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

找到。| 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。

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

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

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

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

我正在寻找的答案是运行脚本,但我希望避免删除脚本本身。因此,如果有人正在寻找类似的答案,请执行以下步骤。

创建一个.sh文件并编写以下代码:

    cp my_run_build.sh ../../ 
    rm -rf * cp  
    ../../my_run_build.sh . 
    /*amend rest of the script*/

由于还没有人提到这一点,在一个特定的案例中:

OLD_FILES=`echo *`
... create new files ...
rm -r $OLD_FILES

(或者只是rm $OLD_FILES)

or

OLD_FILES=`ls *`
... create new files ...
rm -r $OLD_FILES

你可能需要使用shop -s nullglob,如果一些文件可能在那里或不在那里:

SET_OLD_NULLGLOB=`shopt -p nullglob`
shopt -s nullglob
FILES=`echo *.sh *.bash`
$SET_OLD_NULLGLOB

如果没有nullglob,则echo *.sh *。Bash可能会给你“a.sh b.sh *. Bash”。

(说了这么多,我自己更喜欢这个答案,即使它在OSX中不起作用)