ファイル名連番処理スクリプト

シェルスクリプトポケットリファレンスを使ってコツコツ学習してきたのは、ディレクトリ内にある(一応規則的に名前づけられている)ファイルの一群に、「ディレクトリ名+連番+拡張子」というルールで連番処理を施したかったから。
そして求めている処理を達成できるスクリプトが何とか完成。記述の美しさとかはまた別の問題ですが、自分なりに求めていたものができたのでとても嬉しい!

早速実際に走らせて動作チェックだ〜!

例えばtestディレクトリの中にa.txt、b.txt、cd.txt、efghi.txtというファイルがあったとき、testディレクトリ内で上記スクリプトを走らせると、test1.txt、test2.txt、test3.txt、test4.txtという連番ファイルに置き換えてくれるはず。
ファイルが2桁あればtest01.txt、test02.txt・・・というふうになりますし、3桁であればtest001.txt、test002.txt・・・と連番部分の桁数を合わせてくれます。最も、桁数指定は手動で行なっているため、対応しているのは3桁までなのですが、一つのディレクトリにファイルを1000以上入れるようなことは普通ないですから・・・。
そして実際にテストファイルを作って動作確認してみたところ、想定通りの動作になっています。じゃ実際に処理したいディレクトリにある実データを使ってやってみますか!

というわけで、万が一に備えて実データのあるディレクトリのコピーを別区画に作成し、そこで動作確認。

これでサーバ内のファイル整理を行える〜〜♪なんてルンルンでいたら、実データの動作確認で思わぬところに落とし穴が見つかってしまいました・・・。

落とし穴1:拡張子のないファイルが間にあると(当たり前ですが)拡張子のないファイル名で出力される
落とし穴2:ファイル名に空白があると(空白で分割してしまう?)「statできません: そのようなファイルやディレクトリはありません」というエラーが返され、連番処理が行われない(そのままのファイル名で出力されてしまう)

現実的にはファイルに拡張子を付与していないファイルを扱うことはほとんどない(というか、まずない)ので1はあまり大きな問題ではありません。が、2の方は自分以外の人間がファイルを作成した際に間に空白を入れる可能性は排除しきれず・・・(というか、実際そうだったからこのエラーに気づいた)。

というわけで、引き続きブラッシュアップしないとだめでした!

boota

いろんなモノに、いろんな意味で、ヲタ。なのかも?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)