如何从shell命令中删除目录中的每个其他文件?

TK1*_*123 14 linux shell command-line

我从png格式的视频中提取了帧:

00000032.png
00000033.png
00000034.png
00000035.png
00000036.png
00000037.png
Run Code Online (Sandbox Code Playgroud)

等等...

我想使用shell命令从dir中删除每个其他帧,该怎么做?

编辑

我想我的问题并不清楚.我知道我可以手动删除每个文件,如:

rm filename.png
rm filename2.png
Run Code Online (Sandbox Code Playgroud)

等等...

我需要动态地在一个命令中完成所有这些操作,因为文件夹中有数千个图像.

Mar*_*ski 30

这应该做的伎俩:

rm -f *[13579].png
Run Code Online (Sandbox Code Playgroud)

这将消除名称以"1"或"3"或"5"或"7"或"9"加尾随".png"结尾的每个文件.

注:*在图案中使用表示0 or more characters这样1.png会一致,但这样会foo1.png

  • 请将此作为接受的答案,这样更短,更容易记住,然后其他所有内容 (2认同)

Jon*_*ler 24

delete=yes
for file in *.png
do
    if [ $delete = yes ]
    then rm -f $file; delete=no
    else delete=yes
    fi
done
Run Code Online (Sandbox Code Playgroud)

即使文件上的数字不连续,这也会强制进行严格的更改.您可以选择通过以下方式加快速度xargs:

delete=yes
for file in *.png
do
    if [ $delete = yes ]
    then echo $file; delete=no
    else delete=yes
    fi
done |
xargs rm -f
Run Code Online (Sandbox Code Playgroud)

你的名字看起来很清醒(没有空格或其他奇怪的角色可以处理),所以你不必担心真正的通用工具必须处理的一些细枝末节.你甚至可以使用:

ls *.png |
awk 'NR % 2 == 1 { print }' |
xargs rm -f
Run Code Online (Sandbox Code Playgroud)

有很多方法可以达到理想的效果.


Ben*_*ith 5

rm ???????1.png
rm ???????3.png
rm ???????5.png
rm ???????7.png
rm ???????9.png
Run Code Online (Sandbox Code Playgroud)

(但在尝试之前先备份!)。将 dos/windows 的“rm”替换为“erase”。