使用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
当前回答
在Bash中可以使用GLOBIGNORE环境变量。
假设您想删除除php和sql之外的所有文件,那么您可以执行以下操作-
export GLOBIGNORE=*.php:*.sql
rm *
export GLOBIGNORE=
像这样设置GLOBIGNORE会忽略php和sql中的通配符,比如“ls *”或“rm *”。因此,在设置变量后使用“rm *”将只删除txt和tar.gz文件。
其他回答
rm !(textfile.txt|backup.tar.gz|script.php|database.sql|info.txt)
extglob(扩展模式匹配)需要在BASH中启用(如果它没有启用):
shopt -s extglob
使文件不可变。即使root用户也不允许删除它们。
chattr +i textfile.txt backup.tar.gz script.php database.sql info.txt
rm *
所有其他文件都已删除。 最终你可以将它们重置为可变的。
chattr -i *
因为没人提过
把不想删除的文件复制到安全的地方 删除所有文件 将复制的文件移回原位
由于还没有人提到这一点,在一个特定的案例中:
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中不起作用)
试着这样做:
rm -r !(Applications|"Virtualbox VMs"|Downloads|Documents|Desktop|Public)
但是带空格的名字(一如既往)很难取。也尝试用Virtualbox\ VMs代替引号。它总是删除该目录(Virtualbox vm)。