- ベストアンサー
UNIXコマンドでフォルダ内のフォルダをリネーム
初めまして。 質問ですが、UNIXコマンドでフォルダ内のファイルを全てリネームする方法が分からないので教えて下さい。 ファイルの名前は全て同じ文字数で、[***_**_**.csv]となっています。(*は半角英数字です) リネームの内容としては、二つ目のアンダーバーからピリオドまでを消却したいと思っています。 例えばAWKコマンドで文字数から消却できるのでしょうか? 分かる方には簡単な質問で申し訳ありませんがお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
そのディレクトリの直下だけなら cd そのディレクトリ \ls -1 ???_??_??.csv | sed 's/^\(.*\/\)\{0,\}\([^/_]\{3\}_[^/_]\{2\}\)_[^/_]\{2\}\(\.csv\)$/mv & \1\2\3/' | sh そのディレクトリの下に再帰的にあるなら find そのディレクトリ -name "???_??_??.csv" | sed 's/^\(.*\/\)\{0,\}\([^/_]\{3\}_[^/_]\{2\}\)_[^/_]\{2\}\(\.csv\)$/mv & \1\2\3/' | sh # Tacosanさん、ちょっとお借りしてsedを直しました。 いずれも、 (1)ls/findでファイル名一覧を出力。1行に1ファイル (2) (1)の出力をsedで受けて、 ディレクトリ(\1),ファイル名の前半(\2),後半,拡張子(\3)に分解 →mv [元のファイル名] [ディレクトリ,ファイル名の前半,拡張子] と変換して出力 (3) (2の出力を)sh で実行 です。 sedの「mv」を「mv -i 」にすれば、ファイル名が重なった場合に確認するようになります。 |shを削除すれば、事前に動作確認できます。 sedの「mv」を「mv -v 」にするか、sh のあとに -x を付ければ、実行の様子が出力されます、
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
いろいろあるけどたとえば find そこ -name '???_??_??.csv' |sed -e 's/\([^_]*_[^_]*\)\(_.*\)\(\.csv\)/mv \1\2\3 \1\3/' | sh のような感じでもできそう. sed の正規表現は微妙なところがあるけど.