16

ビデオからpng形式でフレームを抽出しました:

00000032.png
00000033.png
00000034.png
00000035.png
00000036.png
00000037.png

等々...

シェルコマンドを使用してディレクトリから1つおきのフレームを削除したいのですが、これを行うにはどうすればよいですか?

編集

質問がはっきりしなかったと思います。私は次のように各ファイルを手動で削除できることを知っています:

rm filename.png
rm filename2.png

等...

フォルダには何千もの画像があるため、これらすべてを1つのコマンドで動的に実行する必要があります。

4

6 に答える 6

38

これでうまくいくはずです:

rm -f *[13579].png

これは、名前が「1」または「3」または「5」または「7」または「9」で終わり、末尾に「.png」が付いているすべてのファイルを削除します。

注:*パターンで使用されるのは、0 or more characters一致し1.pngますが、一致しますfoo1.png

于 2012-09-26T14:51:34.797 に答える
28
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

希望する結果を達成する方法はたくさんあります。

于 2012-09-26T14:47:30.827 に答える
5
rm ???????1.png
rm ???????3.png
rm ???????5.png
rm ???????7.png
rm ???????9.png

(ただし、試す前にバックアップを作成してください!)。dos/windowsの「rm」を「erase」に置き換えます。

于 2012-09-26T14:47:22.157 に答える
1

他のすべての意味が数字1、3、5、7、または9で終わるファイルであるとすると、これで問題が解決します。

find . -regex '.*[13579]\.png' -exec rm {} \;
于 2012-09-26T14:50:57.237 に答える
0

何以外?*を使用して複数のフレームを削除できます。たとえば、すべてを削除するにはrm -f*.pngです。

于 2012-09-26T14:51:41.853 に答える
-1

この小さなスクリプトは、すべてのpngファイルを削除します。

$ find . -name "*.png" -exec /bin/rm {} \;

ドットに注意してください、それは現在のディレクトリを意味します。

同じですが、より安全です。

$ find . -name "*.txt" -delete:

ここで、 png拡張子を持たないすべてのファイルを削除します。

$ find  . ! -name "*.png" -type f -delete
于 2012-09-26T15:03:28.303 に答える