我发现了很多关于如何删除例外文件的建议。但是,这种情况有点不同。假设我的文件夹中有以下 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.mp4
和video_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 -delete
in 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"
。