【最大10000ポイント】当たる!!質問投稿キャンペーン!

同じディレクトリにある

test-sum.txt
test-average.txt
test-deviation.txt
...

というファイルの名前を

my-sum.dat
my-average.dat
my-deviation.dat
...

と一括変更したいのですが、bash で可能でしょうか?
よろしくお願いします!!

ワイルドカード * の扱いが Windows のコマンドプロンプトと違うみたいで、とまどっています。。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

sed版も再帰dirに対応



find . -name '*.txt' -print |
sed -ne 's/\([^/]*\)\/test-\([^.]*\)\.txt/mv \1\/test-\2.txt \1\/my-\2.dat/p' | sh
    • good
    • 1
この回答へのお礼

ありがとうございます!

お礼日時:2005/12/27 14:35

windows の場合、* は各コマンドが個別に独自の意味を持って処理しますが、unixのshellの場合は、各コマンドを起動する前にshellが展開します。


shellでワイルドカードを使う場合は、まず実際のコマンドでなく、echo コマンドを使うと、実際に実行されるコマンドラインがわかるでしょう。
例:echo mv test-*.txt my-*.txt

本題ですが、bashの場合、sedやawkを使わないでも出来ます。

for F in test-*.txt;do mv $F ${F/test-/my-};done
    • good
    • 0
この回答へのお礼

へえ、そういうことができたのですね。ありがとうございます!

お礼日時:2005/12/27 14:34

済みません間違えました。



find . -name '*.txt' -print |
sed -ne 's/.\/test-\([^.]*\)\.txt/mv test-\1.txt my-\1.dat/p' | sh
    • good
    • 1

find . -name '*.txt' -print |


sed -ne 's/test-\([^.]*\)\.txt/mv test-\1.txt my-\1.dat/p' | sh
    • good
    • 0

find . -name '*.txt' -print |


awk '
{
dist = $0;
sub("test-","my-",dist);
sub("txt","dat",dist);

printf ("mv %s %s\n", $0, dist);
}' | sh
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

Qsedなどで、特定の文字列の後の文字列を抽出したい

sedなどで、特定の文字列の後の文字列を抽出したい

シェルスクリプト内で、sedなどを使って特定の文字列の後の文字列を抽出したいのですが、どうすればいいでしょうか?

たとえば、abcXYZ123defghiのなかから、XYZの後の「123」を抜き出したいです。

echo abcXYZ123defghi | sed ...

のようにして実行させたいです。

Aベストアンサー

日本語対応sedだと日本語数字混じりでもできますね。

echo abcXYZ12357defghi | sed -e 's/^.*XYZ\([0-90-9]*\).*$/\1/' -e 'y/0123456789/0123456789/'
12357

※ 使っている日本語コードの指定は必要かも(例えば、 --ctype=EUC)

echo abcXYZ12357defghi | sed -e 's/^.*XYZ\([0-90-9]*\).*$/\1/'
12357

※ 入力フォームに書いている時はASCIIと日本語の判別がし易いけど回答見るとわかり難いですね。後ろの例での結果57とy/0123456789/の数字部分が日本語です。

Qディレクトリの中身(ファイル)をコピーするコマンドは?(fedora)

こんにちは。
fedora core5を使っていてCPコマンドで困りました。
cp -R /home/aaa /home/bbb
と入力して、aaaというディレクトリの中身のファイルを全てbbbというディレクトリへコピーしようとしたのですが、これではaaaというディレクトリごとbbbへコピーされてしまい、/home/bbb/aaa みたいになってしまいます。

指定したディレクトリの中のファイルを全て別ディレクトリへコピーするときはどのように指定すればよいのでしょうか?

Aベストアンサー

カレントディレクトリが/homeとします。
cp ./aaa/* ./bbb/
とすればいいと思います。ドットファイルまでコピーしてくれるかどうかは自信がありません。manを読んで下さい。

QMSDOSからワイルドカード指定で複数ファイル名の一部を一括変更

MSDOSからワイルドカード指定で複数ファイル名の一部を一括変更する方法はありますでしょうか?
例えば、
「a.dat.gz」「b.dat.gz」「c.dat.gz」
上記のような複数ファイルを以下のように変更したいと思っています。
「a.gz」「b.gz」「c.gz」

ちなみに次のコマンドを試してみたのですがダメでした。
ren *.dat.gz *.gz

実際はバッチファイルから処理をさせたいと思っています。
よろしくお願いいたします。

Aベストアンサー

★本当に『a.dat.gz』、『b.dat.gz』、『c.dat.gz』の形式の名前だけですか。
・上記の場合ならば、
 『for %%i in ( a b c ) do ren %%i.dat.gz %%i.gz』で出来ますけど。
 ※a、b、c 以外にあればカッコ内に増やして下さい。
 ※また、バッチファイル内ですので %% と2つにしています。コマンドラインでは % ですよ。
・他にもいろいろな方法はありますけど一例だけ紹介しました。
 ちなみに試していませんが、for 文を使えば ren も上手く利用できます。

その他:
・ワイルドカードの指定で拡張子は、最後のピリオドのフィールドを指します。
 よって、『ren *.dat.gz *.gz』という指定ではすでに拡張子が『.gz』なので上手く出来なかったのです。
・以上。参考に。

Qフォルダ名と同じファイル名が作れません

例えば同一ディレクトリ内にTESTというフォルダがあったとき、
TESTというテキスト文書を作ろうとすると重複のエラーが発生します。

確かMS-DOSの頃はこれができていたと思います。
私もずっとその認識でいて、XPやVISTAでもできると思いこんでいました。

そこで質問はいつから上記のことができなくなったかです。
一応手元のパソコンでWindows98まで重複のエラーを確認できましたが、
それから昔は古すぎて遡ることができませんでした。

もう15年以上も昔のことなので私の記憶違いかもしれませんが、
何となく釈然としないのでご存じの方がいたら教えて下さい。
一応、私が当時使っていたのはPC9801搭載のMD-DOS3.30Aです。

Aベストアンサー

気になったので仮想環境でMS-DOS3.3(PC/AT版)を起動してみました。
現状のWindowsと同様に同一名称のフォルダは作成できませんでした。

もしかすると、PC-98xxシリーズだけの独自仕様でしょうかね。

Qファイル名の一部を一括変更 コマンドプロンプト

先ほど
【拡張子のみ一括変更したい コマンドプロンプト】
http://oshiete.goo.ne.jp/qa/8862743.html
で質問させていただき無事解決いたしました!
どうもどうもありがとうございました!
更に同じような内容になるのかとは思いますが、
どうぞこの素人にご指導くださいます様お願いします。

あるフォルダに入っている下記のようなjpg画像があります。

コマンドプロンプトを使用して『photo』部分のみを削除したいのですが、
可能でしょうか?
   ・
   ・
   ・
『2014_1215photo.jpg』→『2014_1215.jpg』
『2014_1216photo.jpg』→『2014_1216.jpg』
『2014_1217photo.jpg』→『2014_1217.jpg』
『2014_1218photo.jpg』→『2014_1218.jpg』
   ・
   ・
   ・

*フォルダ内のファイルはすべてjpg
*すべて上記の規則にのったファイル名
*windoews8

どうぞよろしくお願いいたします。

先ほど
【拡張子のみ一括変更したい コマンドプロンプト】
http://oshiete.goo.ne.jp/qa/8862743.html
で質問させていただき無事解決いたしました!
どうもどうもありがとうございました!
更に同じような内容になるのかとは思いますが、
どうぞこの素人にご指導くださいます様お願いします。

あるフォルダに入っている下記のようなjpg画像があります。

コマンドプロンプトを使用して『photo』部分のみを削除したいのですが、
可能でしょうか?
   ・
   ・
   ・
『2014_1215photo.jpg』→『2014_1215...続きを読む

Aベストアンサー

もしかすると説明も必要かな?

ren *.jpg ?????????.jpg

ココで使用している * や ? はワイルドカードというものです

ワイルドカードの使い方
http://www.adminweb.jp/command/ini/index7.html

* は任意の文字列
? は任意の一文字

で、実行している動作は
ren(名前の変更)*.jpg(拡張子がjpgのファイルを)?????????.jpg(先頭から9文字.jpg)に変更

ということです


人気Q&Aランキング