特定のファイルの後にアルファベット順にファイルのみを表示するようにファイルリストをフィルタリングします。

特定のファイルの後にアルファベット順にファイルのみを表示するようにファイルリストをフィルタリングします。

私は時々提供したい多くの画像コレクションを持っていますffmpeg。しかし、私はただアルファベット順に食べたい後ろに一部の画像(最後の実行の最後のフレーム、一部のファイルに保存された名前)。

たとえば、ファイルのシーケンス/インデックス番号を見つけてheadそのtail番号を使用できますか?

それともパラメータ-pattern_type globとして使用できる魔法のようなものがありますか?ffmpeg -i

これまで最高のフィルタリングソリューションはこれのようですが、ちょっとそうです。重い:

find . -maxdepth 1 -type f | sort |  awk '$0 > "./picture_2022-04-22_13-46-12.jpg"'

代替案は、リストをテキストファイルに入れてそこから解析し、テキストファイルをffmpegに供給することです。しかし、もっと簡単な方法がありますか?

ベストアンサー1

ソート後、someまたはsedを使用してawkパターンからストリームの終わりまで一致させることができます。最後のffmpegコマンドがファイル引数のリストを受け入れるとします。私は以下をaにprintf置き換えました。ffmpeg

find . -type f -print0 | sort -z | sed -nz '/pattern/,$p' | xargs -r0 printf '%s\n'

GNUパラメータを使用して分離します。sedこのコマンドは、パターン(含む)からストリームの終わりまでソートされた引数をフィルタリングします。

終わりではなく、2番目のパターンまでパターンからファイルをインポートする唯一の修正sedsed -zn '/pattern1/,/pattern2/p'

あなたの場合(深さ1)、通常のファイルをテストしないより短い選択肢は次のとおりです。

printf '%s\0' ./*.jpg | sed -nz '/pattern/,$p' | xargs -r0 printf '%s\n'

ここのファイルは最初のステップの後にすでにアルファベット順にソートされています。

あるいは、ファイル名に必ずしも存在しない文字列を比較、除外、または含めることもできます。awkすでに使用している方法を使用することをお勧めします。たとえば、次の名前のすべてのファイルをインポートします2022-01

printf '%s\0' ./*.jpg | awk 'BEGIN {RS=ORS="\0"} $0 > "./picture_2022-01"' | xargs -r0 printf '%s\n'

おすすめ記事