次のファイルがたくさんあります。
Some Name da-1234567-1.py
Some Name da-1234567-2.py
Some Name da-1234567-4.py
Other Name di-5678912-3.py
Other Name di-5678912-4.py
Other Name di-5678912-5.py
すべてのバージョンを削除し、次のバージョンのみを維持したいと思います。
Some Name da-1234567-4.py
Other Name di-5678912-5.py
私の問題は次のようなものであることに気づきました。最新のフォルダ/ファイルバージョンの検索と削除 - タイムスタンプデータなし。しかし、その答えは私には効果がなく、私のニーズに合わせてソリューションを変更するのに十分なbashおよび/または正規表現について十分にはわかりません。残念ながら、コメントを残す評判スコアがないため、新しい質問を投稿する以外に他の選択肢はありません。
上記の質問で以下を試しました。
for file in *.*
do
[[ -d "$file" || $file =~ _[[:digit:]]{3}\. ]] && continue
echo -n "Considering $file: " >&2
extn="${file/*.}"
versions=("$file")
keep="$file"
# Look at matching files
for version in "${file%.$extn}"_???."$extn"
do
[[ -f "$version" ]] || continue
# Save every one. Identify the current last
versions+=("$version")
keep="$version"
echo -n "$version " >&2
done
echo "==> keep $keep" >&2
# Delete them all except the last
for version in "${versions[@]}"
do
[[ "$version" != "$keep" ]] && echo rm -f -- "$version"
done
[[ "$keep" != "$file" ]] && echo mv -f -- "$keep" "$file"
done
この部分に問題がある可能性があることに気づきました。
$file =~ _[[:digit:]]{3}\.
上記の質問とは異なり、私のファイルは_nnnの代わりに-nで終わりますが、どのように修正するのかわかりません。
ベストアンサー1
バージョン番号で使用してls -v
並べ替えられたソフトウェアツール1行:sort -V
{ ls -Qrv *.py |rev | uniq -f 1 | rev; ls -Q *.py; } | sort -V | uniq -u | xargs rm
使用法は、uniq -f 1
一貫したファイル命名形式によって異なります。最後のフィールドを無視する他の方法がないので、rev
周囲のsが必要です。-f