如何从特定文件夹中删除除一个命名文件之外的所有文件

如何从特定文件夹中删除除一个命名文件之外的所有文件

情况如下。

我有一个目录,其中包含许多具有不同扩展名的文件。我想删除除具有特定名称的文件之外的所有文件。

可以使用 GUI 轻松完成此操作,通过选择全部并按下ctrl并取消选择相关文件。

这正是我想要的,但是我如何从命令行做到这一点?

例如: dirA 包含以下文件:

a.txt
b.txt
c.php
d.html
a.db
b.db
e.html

我想删除所有文件,只保留名为 的文件a.txt

答案1

我得到了这个简单易懂的命令:

rm !(a.txt)

你可以使用 ! 作为否定

首先用 echo 测试 glob,即

echo !(a.txt)

如果不起作用,bash你可能需要使用

shopt -s extglob

如果您想保留a.txtb.txt,则可以使用!(a.txt|b.txt)!([ab].txt)

编辑:

要使rm工作递归,只需-r添加

rm -r !(a.txt)

而且,它还可以与文件夹一起使用。只需将名称更改为目录名称,例如a_dir

rm -r !(a_dir)

答案2

你可以尝试这个命令:

find . \! -name 'a.txt' -delete

但您需要小心,因为 find 命令是递归的。

答案3

您可以在终端中执行此操作:

cd dirA 
export GLOBIGNORE=a.txt
rm *
export GLOBIGNORE=

答案4

您可以使用以下命令:

find ! -name 'a.txt' -type f -exec rm -f {} +

-type f这将在当前目录中查找除文件( )之外的文件a.txt! -name 'a.txt),然后将其删除(-exec rm -f {} +

相关内容