删除某些文件,其他文件除外

删除某些文件,其他文件除外

我发现了很多关于如何删除例外文件的建议。但是,这种情况有点不同。假设我的文件夹中有以下 6 个文件Ubuntu 18.04

text_1.json
text_2.json
video_1.mp4
video_2.mp4
video_1_notouch.mp4
video_2_notouch.mp4

该命令应该只删除video_1.mp4video_2.mp4文件,同时保留其他文件。

rm -v !(*.json|*_notouch.mp4)按照建议尝试过这里,但它删除了所有 6 个文件。

答案1

更好也更容易使用的find命令是:

find . -type f -name "*.mp4" ! -name "*_notouch.mp4" -exec rm -v {} \;

此命令将匹配以 结尾的任何文件名.mp4,但不以 结尾,_notouch.mp4并将运行 之后给出的命令-exec

在进行此类破坏性操作之前,最好在命令rm前面加上或替换命令echo,并验证您是否获得了期望的命令:

find . -type f -name "*.mp4" ! -name "*_notouch.mp4" -exec echo rm -v {} \;

[编辑]正如评论中提到的那样;对于您的情况,您可以直接使用-print -deletein place of -exec echo rm -v {} \;(如果您有数百万个文件,这将更有效)。要列出将受影响的文件(在运行破坏性命令之前),您只需运行:

find . -type f -name "*.mp4" ! -name "*_notouch.mp4"-print可选)

另外,如果你不要想要影响子目录,你可以使用-maxdepth 1如下选项:

find . -maxdepth 1 -type f -name "*.mp4" ! -name "*_notouch.mp4"

相关内容