我从一个png格式的视频中提取了帧:
00000032.png 00000033.png 00000034.png 00000035.png 00000036.png 00000037.png
等等我想使用shell命令从目录中删除每隔一个帧,如何操作?
我想我没问清楚。我知道我可以手动删除每个文件,如:
rm filename.png rm filename2.png
等等我需要在一个命令中动态地完成所有这些操作,因为文件夹中有数千张图像。
i1icjdpr1#
这应该可以解决问题:
rm -f *[13579].png
这将消除每个文件的名称结束1或3或5或7或9加上尾随.png后缀。注意:模式中使用的*匹配0 or more characters,因此foo1.png将被删除,但1.png也将被删除。
1
3
5
7
9
.png
*
0 or more characters
foo1.png
1.png
qeeaahzv2#
delete=yes for file in *.png do if [ $delete = yes ] then rm -f $file; delete=no else delete=yes fi done
这强制严格交替,即使文件上的数字不连续。您可以选择使用xargs来加快速度,方法是:
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
有很多方法可以达到你想要的结果。
huwehgph3#
rm ???????1.png rm ???????3.png rm ???????5.png rm ???????7.png rm ???????9.png
(but在尝试之前做一个备份!)。对于dos/windows,将“rm”改为“erase”。
vtwuwzda4#
假设每隔一个意味着文件结束数字1,3,5,7或9,那么这就解决了你的问题
find . -regex '.*[13579]\.png' -exec rm {} \;
ivqmmu1c5#
除了什么您可以使用 * 删除多个帧。例如rm-f *.png删除所有。
vc6uscn96#
这个小脚本删除所有png文件:
$ find . -name "*.png" -exec /bin/rm {} \;
注意点,它表示当前目录。这是相同的,但更安全:
$ find . -name "*.txt" -delete:
现在,删除所有没有png扩展名的文件:
$ find . ! -name "*.png" -type f -delete
6条答案
按热度按时间i1icjdpr1#
这应该可以解决问题:
这将消除每个文件的名称结束
1
或3
或5
或7
或9
加上尾随.png
后缀。注意:模式中使用的
*
匹配0 or more characters
,因此foo1.png
将被删除,但1.png
也将被删除。qeeaahzv2#
这强制严格交替,即使文件上的数字不连续。您可以选择使用
xargs
来加快速度,方法是:您的名字看起来很正常(没有空格或其他奇怪的字符),因此您不必担心真正的通用工具必须处理的一些细节。您甚至可以使用:用途:
有很多方法可以达到你想要的结果。
huwehgph3#
(but在尝试之前做一个备份!)。对于dos/windows,将“rm”改为“erase”。
vtwuwzda4#
假设每隔一个意味着文件结束数字1,3,5,7或9,那么这就解决了你的问题
ivqmmu1c5#
除了什么您可以使用 * 删除多个帧。例如rm-f *.png删除所有。
vc6uscn96#
这个小脚本删除所有png文件:
注意点,它表示当前目录。
这是相同的,但更安全:
现在,删除所有没有png扩展名的文件: