私はたくさんの写真を持っています。一部はあり、.jpg
一部はです.png
。与えられた画像は完全に任意の名前を持つことができます(スペースを含めることができます)。特定のディレクトリ内で拡張子を変更せずにすべてのディレクトリの名前を変更するにはどうすればよいですか?たとえば、次のようになります。
001.jpg 02.png 05.png zzzz.jpg
0001
で始まり9999
(必要な場合)、4桁の数字で名前を完全に変更したいと思います。したがって、出力は次のようになります。
0001.jpg 0002.png 0003.png 0004.jpg
このファイルの順序は私にとって重要ですが、ファイル名で並べ替えると、すでに順に並べ替えられています。
私はPerlをチェックしてみましrename
たが、この例ではPerlの使い方は私にとって謎です。
ベストアンサー1
Perlソリューション
perl -e '
@files = sort glob "*.png *.jpg";
for(@files){
($extension = $_) =~ s/.*\.(.*)/$1/;
$new_name = sprintf("%04d",++$counter).".$extension";
die "File $new_name already exists and would be clobbered\n" if -e $new_name;
rename $_ => sprintf("%04d",++$counter).".$extension"
}'
カンクンソリューション
export COUNT=0
find . -maxdepth 1 -name "*.jpg" -o -name "*.png" -print0 | xargs -0 sort | while read file do\
extension=${file##*.}\
COUNT=$((COUNT+1))\
mv -- "$file" $(printf "%04d" $COUNT).$extension\
done
ノート
どちらのソリューションもテストされていない Bash ソリューションです。まずダミーファイルで試してみてください。- ファイル名に改行文字が含まれていると、Bashソリューションがクラッシュする可能性があります。
- 危険:Gillesが以下の説明で指摘したように、元のファイルの1つの名前がターゲットの命名規則に従うと、せいぜい別の「数字」に名前が変更され、最悪の場合は他のファイルによって破損します。何が起こるかは、他のファイルに対してどのようにソートされるかによって異なります。 OPが好むようだったので、これをPerlソリューションに追加しました。
- Perlソリューション(上記の実装)は次のとおりです。非等性。