次のような名前のファイルがたくさんあります。
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.txt
、some_other_file-2.txt
。 Linuxコマンドラインでこれをどのように実行しますか?
ベストアンサー1
そしてzsh
:
typeset -A greatest
for f (*-*(n)) greatest[${f%-*}]=$f
cp -- $greatest /destination
*-*(n)
-
:名前に(*-*
)が含まれており、番号でソートされた非表示のファイル((n)
glob修飾子)。${f%-*}
:ファイル名の一部、右まで-
(またはなければ最後まで-
)。$greatest
:空でない状態に展開されます。価値連想配列。したがって、ここでは、同じルートディレクトリを共有するファイルの場合、最も高い番号のファイルのみが拡張されます。