アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるディレクトリにある複数のファイルの一部の文字を別の文字に置き換えたいのですが、
どのようなコマンドで実現できますか?

変換前 *AAA*
absdAAAfdsad.dat
fdAAAsfds.txt
fdffdAAAs.sh
ffdfAAAdsAfds.xx

変換後 *BBB*
absdBBBfdsad.dat
fdBBBsfds.txt
fdffdBBBs.sh
ffdfBBBdsAfds.xx

変換したいファイル名は上記のようにファイル名の長さが違いますが、
各ファイル名の一部に共通の文字列が用いられています。
ファイルが100個ぐらいあるので手作業では大変なので、
これをコマンド一発で変換したいのです。

環境はcygwinでやっています。
もしwindowsのエクスプローラやDOSコマンドで実現可能ならそちらでも教えていただけると助かります。
よろしくお願いします。

A 回答 (3件)

cygwin はよく知りませんが Unix 系ということであれば、こんなやり方とか



ls *AAA* | awk '{print "mv " $0 " " gensub(/AAA/,"BBB","g")'}' | csh

なお、ls に alias で -F オプションをつけてたりする場合ははずしてください。
(実行可能ファイルが「foo*」と出てしまったりするから)

まあ、Windows であればリネームソフト使う方がお手軽かもしれませんが。私はこれ使ってます。

Flexible Renamer
http://www.vector.co.jp/soft/win95/util/se131133 …
    • good
    • 0

違うかもしれませんが、フリーソフトとならしってます。


ファイル名変換のリネームソフトです

http://www.forest.impress.co.jp/lib/sys/file/fil …
    • good
    • 0

DOS コマンドなら、



cmd /v:on
for /f "tokens=*" %A in ('dir /b') do @(set f=%A& ren "!f!" "!f:AAA=BBB!")

で行けると思います。ただし、DOS では大文字小文字を区別しないので、aaAAAaa.txt のようなファイル名があると期待通りの結果にならないので、注意が必要です。

bash なら

for file in *; do mv $file ${file/AAA/BBB}; done

ですね。こちらは大文字小文字を区別します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!