ファイル名が常に形式であると仮定すると<name>_<numbers>.jpg
、ここに簡単なハックがあります。
while read filename; do
prefix=${filename/%_*/} # Get text before underscore
if [ "$prev_prefix" != "$prefix" ]; then # we see a new prefix
echo "Keeping filename"
prev_prefix=$prefix
else # same prefix
echo "Deleting $filename"
rm $filename
fi
done < <(find . -maxdepth 1 -name "*.jpg"| sort -n -t'_' -k1,2)
仕組み:
- すべての
*.jpg
ファイルを最初に で並べ替え<name>
、次に で並べ替えます<numbers>
。
- 同じプレフィックスを持つすべてのファイルがグループ化され、最も高いもの
<number>
が最初に表示されます
- ファイル名のリストを繰り返し処理し、新しいファイルが見つかった場合を除いてファイルを削除します
<name>
(これは最高のファイルである必要があります<number>
) 。
find
の代わりに が使用されていることに注意してくださいls *.jpg
。これにより、多数のファイルをより適切に処理できるようになります。
免責事項: これは、ファイルとバージョン管理を処理するためのかなり脆弱な方法であり、長期的な解決策として採用すべきではありません。質問に投稿されたコメントに注意してください。