如何删除文件夹中除某些指定文件之外的所有文件?

AGa*_*yer 13 command-line rm files

我想删除目录中的所有文件,同时只保留一些指定的文件,它们的名称没有任何共同点。我怎么能做到这一点?

例如,我想保留的文件名是:

file_1.png, another_file.jpg,some_music.mp3

jim*_*mij 19

如果您使用 bash:

shopt -s extglob
rm -- !(file1|file2|file3)
Run Code Online (Sandbox Code Playgroud)

第一行只是激活扩展模式匹配,然后我们使用其中一个:

!(pattern-list) 匹配除给定模式之一之外的任何内容

模式列表是一个或多个模式的列表,由|.


或与 zsh

setopt extendedglob
rm -- ^(file1|file2)
Run Code Online (Sandbox Code Playgroud)

或者,更便携,使用find

find . -maxdepth 1 ! -name 'file1' ! -name 'file2' -type f -exec rm -v {} +
Run Code Online (Sandbox Code Playgroud)

  • 包括如何返回可选的 shell 行为(`shopt -u extglob`)可能很有用。 (3认同)

Ant*_*hon 8

创建一个子目录tmp,将所有要保留的文件移动到该目录,rm -f *然后执行。那不会影响tmp目录。

之后只需执行以下操作:

mv tmp/* .
rmdir tmp
Run Code Online (Sandbox Code Playgroud)

(假设您移动的文件都没有以点开头)。

这是使用鼠标和文件浏览器(如 Nautilus)有意义的少数情况之一,您实际上可以在其中Ctrl单击要保留的几个文件,然后使用菜单:Edit -> Invert Selection获取其他文件,然后删除它们.

  • @AwQiruiGuo tmp 的优点是它首先将文件分成两组,然后不可撤销地删除您不想要的文件。所以你可以运行一个 `ls` 来看看你是否没有错过任何你想要保留的文件。 (3认同)