質問: CentOSをつかっているのですが、bashのコマンドラインで 「aaa1.txt」から「aaa5.txt」まで連続した番号のものを圧縮したいとすると、 $ gzip aaa[1-5].txt とすれば、できますが、たぶんこれはgzipが正規表現に対応しているからだろうと思います。 また、よくlsやgrepなどでアスタリスクを使ったりするのですが、 これもそうだろうと思います。sedでは、後方参照ができますが、一方で $ mv aaa¥([1-5]¥).txt bbb¥1.txt なんてやってもうまくいきません。 シェルスクリプトを書くまでもない処理で、 こういう後方参照をする方法というのはあるのでしょうか?
回答: Unix/Linux (というか bash) ではコマンドラインの展開を行うのは bash の仕事ということになっています。 $ gzip aaa[1-5].txt と入力したらこのファイル名展開を行うのは bash であり、起動されるコマンドは $ gzip aaa1.txt aaa2.txt aaa3.txt aaa4.txt aaa5.txt となります。 gzip が展開を行っているわけではありません。 一方で mv の仕様として mv file1 file2 (file1 を file2 に改名する:このときは引数は2個でなければならない) mv file1 directory (file1 を directory/file1 に改名する) mv file1 file2 ... directory (引数が3つ以上のとき、最後の引数はディレクトリを指定する必要がある) なので、提示の mv は動かないのが当然ということになります。 提示 mv で何がしたいのか微妙につかめませんが aaa/aaa*.txt を bbb ディレクトリに移す (aaa*.txt のまま) のなら `mv aaa/aaa*.txt bbb` でしょうし bbb*.txt に名前を変更しながら bbb ディレクトリに移すのなら ``` for i in aaa/aaa*.txt; do mv $i `sed s/aaa/bbb/g`; done ``` となるでしょう。