ファイル名の最大数でファイルを並べ替える

ファイル名の最大数でファイルを並べ替える

次のような名前のファイルがたくさんあります。

name_file-1.txt
name_file-2.txt
name_file-3.txt
some_other_file-1.txt
some_other_file-2.txt

何千もの異なるファイル名があり、いくつか-1.txtは最後に1つだけあり、いくつか-1.txt-2.txt...-60.txt

各ファイルの最大数をコピーする必要があるためname_file-3.txtsome_other_file-2.txt。 Linuxコマンドラインでこれをどのように実行しますか?

ベストアンサー1

そしてzsh

typeset -A greatest
for f (*-*(n)) greatest[${f%-*}]=$f
cp -- $greatest /destination
  • *-*(n)-:名前に(*-*)が含まれており、番号でソートされた非表示のファイル((n)glob修飾子)。
  • ${f%-*}:ファイル名の一部、右まで-(またはなければ最後まで-)。
  • $greatest:空でない状態に展開されます。価値連想配列。したがって、ここでは、同じルートディレクトリを共有するファイルの場合、最も高い番号のファイルのみが拡張されます。

おすすめ記事