番号でフォルダ名を一括変更

番号でフォルダ名を一括変更

pltというファイル名をまとめて変更する必要がありますか? ? ? pltとして????.

500ごとに0から99500までの数字順になっていますが、100,000個を超えるものもあるので、すべて6桁に設定したいと思います。

ターゲット: 現在 - plt99500 ターゲット - plt099500

どんな助けでも大変感謝します。

ベストアンサー1

すべてのファイルが同じディレクトリにあると仮定できる場合、どのファイルも同じ名前を持つことはできません(名前がなく、plt500すでにplt000500)。みんな名前にはplt数字のみが含まれ、で始まるすべてのファイルのplt名前を変更する必要があります。これにより、次のことができます。

for f in plt*; do
   numNoZero=$(sed 's/^0*//' <<<"${f/plt/}")
   echo mv -- "$f" "$(printf 'plt%06d' "$numNoZero")";
done

最初に名前がで始まるすべてのファイルとディレクトリを繰り返し(ディレクトリをスキップする必要があるかどうかを教えてください)、次は削除されたファイル名なので、plt数字でなければなりません。先行ゼロ(存在する場合)を削除し、結果(先行ゼロを持たない数字)をとして保存するコマンドを介してこの結果を提供します。次に、を使用して印刷するように指示し、6桁の数字を印刷します。 ()希望の名前で使用してください。$f${f/plt/}pltsed$numNoZeroprintfplt%06dmv

これが正しいと思われる場合は、削除してやり直してecho実際にファイル名を変更してください。

または、Perl(Ubuntuや他のDebianシステムなどではPerlと呼ばれるrename)がある場合は、次のことができます。renameperl-renameprename

rename -n 's/plt0*(\d+?)$/sprintf("plt%06d", "$1")/e' plt*

おすすめ記事