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)
创建一个子目录tmp,将所有要保留的文件移动到该目录,rm -f *然后执行。那不会影响tmp目录。
之后只需执行以下操作:
mv tmp/* .
rmdir tmp
Run Code Online (Sandbox Code Playgroud)
(假设您移动的文件都没有以点开头)。
这是使用鼠标和文件浏览器(如 Nautilus)有意义的少数情况之一,您实际上可以在其中Ctrl单击要保留的几个文件,然后使用菜单:Edit -> Invert Selection获取其他文件,然后删除它们.