我从png格式的视频中提取了帧:
00000032.png
00000033.png
00000034.png
00000035.png
00000036.png
00000037.png
依旧......
我想使用shell命令从dir中删除所有其他帧,该怎么做?
我想我的问题并不清楚。我知道我可以手动删除每个文件,如:
rm filename.png
rm filename2.png
等...
我需要动态地在一个命令中完成所有这些操作,因为文件夹中有数千个图像。
答案 0 :(得分:26)
这应该可以解决问题:
rm -f *[13579].png
将消除名称以“1”或“3”或“5”或“7”或“9”加尾随“.png”结尾的每个文件。
注意:*
代表0 or more characters
使用1.png
,因此foo1.png
会匹配,{{1}}
答案 1 :(得分:22)
delete=yes
for file in *.png
do
if [ $delete = yes ]
then rm -f $file; delete=no
else delete=yes
fi
done
即使文件上的数字不连续,也会强制执行严格的更改。您可以选择使用以下内容xargs
加快速度:
delete=yes
for file in *.png
do
if [ $delete = yes ]
then echo $file; delete=no
else delete=yes
fi
done |
xargs rm -f
你的名字看起来很清醒(没有空格或其他奇怪的角色可以处理),所以你不必担心真正的通用工具必须处理的一些细枝末节。你甚至可以使用:
ls *.png |
awk 'NR % 2 == 1 { print }' |
xargs rm -f
有很多方法可以达到预期的效果。
答案 2 :(得分:3)
rm ???????1.png
rm ???????3.png
rm ???????5.png
rm ???????7.png
rm ???????9.png
(但在尝试之前先做好备份!)。对于dos / windows,将“rm”替换为“erase”。
答案 3 :(得分:1)
假设所有其他意味着文件的结尾数字为1,3,5,7或9,那么这就解决了你的问题
find . -regex '.*[13579]\.png' -exec rm {} \;
答案 4 :(得分:0)
除了什么? 您可以使用*删除多个帧。例如rm -f * .png删除所有。
答案 5 :(得分:0)
这个小脚本删除所有png文件:
$ find . -name "*.png" -exec /bin/rm {} \;
注意点,这意味着当前目录。
它是一样的,但更安全:
$ find . -name "*.txt" -delete:
现在,删除所有没有 png扩展名的文件:
$ find . ! -name "*.png" -type f -delete