使用 sudo rm -r
命令时,如何删除除以下文件外的所有文件:
textfile.txt
backup.tar.gz
script.php
database.sql
info.txt
尝试过以下方法:
rm -r !(Applications|"Virtualbox VMs"|Downloads|Documents|Desktop|Public)
Virtualbox\ VMs
而不是引号。它总是删除那个目录(Virtualbox VMs
)。rm !(myfile.txt)
会删除所有内容,包括myfile.txt
。 - khaverimshopt -s extglob
。 - zhuguoweishopt -s extglob
然后 cd /Users/alumno/
最后 rm -rf !(Applications|Virtualbox*VMs|Downloads|Documents|Desktop|Public|Library)
在此处阅读有关扩展globbing的信息:https://www.linuxjournal.com/content/bash-extended-globbing - juanfal只需:
rm $(ls -I "*.txt" ) #Deletes file type except *.txt
或者:
rm $(ls -I "*.txt" -I "*.pdf" ) #Deletes file types except *.txt & *.pdf
将文件设置为不可变的。即使是root用户也无法删除它们。
chattr +i textfile.txt backup.tar.gz script.php database.sql info.txt
rm *
所有其他文件都已被删除。
最终,您可以将它们重置为可变的。
chattr -i *
我相信你可以使用
rm -v !(filename)
-o 标志来处理多个模式。 -o 标志代表“或”。
find . -type f -not -name' * ignore1'-o -not -name' * ignore2'| xargs rm
cp my_run_build.sh ../../
rm -rf * cp
../../my_run_build.sh .
/*amend rest of the script*/
files=( backup.tar.gz script.php database.sql info.txt )
接下来,循环遍历要排除的目录中的所有文件,检查文件名是否在不想排除的数组中;如果不是,则删除该文件。
for file in *; do
if [[ ! " ${files[@]} " ~= "$file" ]];then
rm "$file"
fi
done
由于还没有人提到这一点,在一个特定的情况下:
OLD_FILES=`echo *`
... create new files ...
rm -r $OLD_FILES
(或者只需使用rm $OLD_FILES
)
或者
OLD_FILES=`ls *`
... create new files ...
rm -r $OLD_FILES
如果有些文件可能存在或不存在,您可能需要使用shopt -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"。
(话虽如此,我个人更喜欢 this answer,尽管它在 OSX 上不起作用)
rm *
或rm -r *
删除所有文件。删除除了 file.name 以外的所有内容:
ls -d /path/to/your/files/* |grep -v file.name|xargs rm -rf
rm -r
所暗示的那样-删除其他所有内容,包括子目录-即使它们包含具有指定名称的文件;或者(b)遍历目标目录的整个子树,在每个目录中删除除列出名称的文件之外的所有文件。 - mklement0.git
而浪费了数天的工作时间,由于没有推送,我无法恢复超过30次提交。确保您排除了所有您关心的内容,包括隐藏文件夹。如果你要处理目录,请设置"-maxdepth 1"。 - Lonami