• ベストアンサー

shellでワイルドカードを使った複数ファイルの指定について

お世話になります。 Linuxのbash上でワイルドカードを使って複数の数字のみのファイルを複数一括指定する方法がわかりません。 (単独ではそれぞれ指定できるのですが・・・) 具体的には 1~9までの.jsファイルと 10~20までの.jsファイル。 を同時に指定したいのです。 単独では $ ls -1 ./[1-9]\.html ./1.js ./2.js ./3.js ./4.js ./5.js ./6.js ./7.js ./8.js ./9.js $ ls -1 ./[1-2]?\.html ./10.js ./11.js ./12.js で指定できるのですが、上記を一度に指定するにはどうすればよいのでしょうか。()や[]|+等を使って色々やってみたのですが、上手くいきません。 お手数ですがご教授願えませんでしょうか。宜しくお願いします。

  • taku0
  • お礼率80% (160/199)

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

ちょっと違うかも知れないけど・ ls -1 ./{[1-9],[12][0-9]}.js とか

taku0
質問者

お礼

お返事遅くなりました。(お礼内容を記入し送信したはずだったのですが、勘違いからか送信されてないみたいでした。) 今回、ご教授頂いた方法で、無事複数のファイルを指定する事が出来ました。 ワイルドカードと正規表現の違いに、一つ理解が深まりました。 有難うございます。

その他の回答 (4)

回答No.5

訂正 ls -1|egrep '^[0-9]+'.js

taku0
質問者

お礼

egrepを使う方法もあるんですね。視野が広がります。 有難うございました。

回答No.4

ls -1|egrep '[0-9]+'.js

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.3

なんで、一度に指定しないといけないのですか?一度に指定することによって何をしようとしているのかを含めて質問した方が有意義な回答が得られると思いますよ。 シェルのワイルドカードは正規表現ではありません。だからピリオドに ¥ をつける必要もないですよ。 ()や+-など一切使えません。使えるのは、*と?と[]だけ。 $ ls -1 ./[1-2]?.js だと、1a.jsとか、1X.jsとか。1@.js も出てきてしまいます それと、なんで ./ をつけているのでしょうか?? $ ls -1 [1-9].js [1-2][0-9].js こうするしかないですが、2桁数字のhtmlが存在しない状況には対応できません。 大げさですが、いろいろな状況に対応できるのは、 ls -1 |sed -n '/^[1-9].js/p;/^[1-2][0-9].js/p' だとおもいます。 他の方の回答にある {を使った方式ですが、使用するシェルに依存しますので注意してください。 もちろんbashではOKですが、solarisなど昔ながらのbourne-shではサポートされていません。 ( ls -1 [1-9].js 2>&/dev/null ; ls -1 [1-2][0-9].js 2>/den/null) でも良いとも居ますが。

taku0
質問者

お礼

この度はご教授頂きまして有難うございました。 >なんで、一度に指定しないといけないのですか? これは、シェルスクリプトから自動で作成されるファイルを、その後シェルスクリプトで削除する際、2行で行うのではなく、1行で何とかできないかな。。と思ってトライした結果からです。 $ ls -1 ./[1-2]?.jsとしていたのは、数字から始まるファイルを指定するのを意図してやってみていたのです。 >それと、なんで ./ をつけているのでしょうか?? これは、ディレクトリを指定する際、上位の指定はls ..又はls ../であるのに対して現在いる場所の指定は.又は./であるという認識からです。当然、./と指定しなくてもそのままlsだけでも良いのは理解しております。またls aのようにディレクトリorファイル名を指定した場合、ファイル又はディレクトリをシェルが自動で判別してくれますが、予めファイルorディレクトリかを分かっている場合、ディレクトリの場合ですとls ./a/という風に木構造で指定する考えでいるからです。これはls a[Tab]で補完する際、ディレクトリには/が付く為、ディレクトリであるかないか、ディレクトリ構造を考える際の判断基準がどうしても/をつけて考えるようになっている為です。 >ls -1 |sed -n '/^[1-9].js/p;/^[1-2][0-9].js/p' 上記はせっかくご掲示頂いたのですが、求めている結果にはならず私の方では何も表示されませんでした。 この度は色々とご教授頂きまして有難うございます。とても勉強になりました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

やりたいこととやっていることが食い違ってるんだけど, {1..20}.js じゃダメ?

taku0
質問者

お礼

それでは駄目みたいです。 有難うございました。

関連するQ&A

  • 外部ファイルを複数読み込ませて・・・

    複数の****.js(中身は半角数字)を読み込み 中身(数字)を足して表示させたいのですが方法が分かりません。 表示はJavaScliptとして表示させようと思っています。 ファイルが1つの場合は、下記で対応出来るのですが open(IN,"./****.js"); while(<IN>) AAAA.js BBBB.js CCCC.js DDDD.js EEEE.js となる、複数のファイルを読み込ませ 中身の数字を足したものを表示させる方法が分かりません。 ご存じの方のご教授をどうかお願い致します。

    • 締切済み
    • CGI
  • jsファイルでfaviconを指定したいのですが

    複数のhtmlの共通部分を、別のjsファイルから読み込み、表示させるよう指定しています。 このjsファイルの中に、<head>~</head>の中身まで入れることはできますか? 具体的には、link要素でのfaviconとcssの読み込みをhtml側ではなく、jsファイル側に記述することはできますでしょうか?

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

    MSDOSからワイルドカード指定で複数ファイル名の一部を一括変更する方法はありますでしょうか? 例えば、 「a.dat.gz」「b.dat.gz」「c.dat.gz」 上記のような複数ファイルを以下のように変更したいと思っています。 「a.gz」「b.gz」「c.gz」 ちなみに次のコマンドを試してみたのですがダメでした。 ren *.dat.gz *.gz 実際はバッチファイルから処理をさせたいと思っています。 よろしくお願いいたします。

  • shellスクリプトに複数の引数を渡したい

    shellスクリプトに複数の引数を渡したいと考えています。 下記のようなperlスクリプトを兼ねる事でやりたいことは達成できました。 これをシェルスクリプトだけでやろうとしていて、ハマってしまい、やり方がわからなかったので、質問しています。 ・echo.shの中身 $ cat echo.sh echo $1 $2 ・imglist.plの中身 $ cat imglist.pl my@imglist= `ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} 2>1&`; foreach(@imglist){ my@name=split /\./,$_; system("bash ./echo.sh $name[0] $name[1]"); } ・実行すると、無事echo.shに引数が2つ渡る。 $ perl imglist.pl abc1 jpg abc10 png abc11 png abc2 jpg abc3 jpg これをシェルのみでやろうとして、はまってしまいました。 以下は、パイプ処理等を使ったりしてやってみたのですが出来ませんでした。 ・awkでファイル名と拡張子に分解し、パイプで渡そうとしても何故か渡らない・・ $ ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} | awk -F . '{print $1,$2}'| bash ./echo.sh ・ファイルに一旦保存し、catコマンドでパイプで渡しても駄目 $ ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} | awk -F . '{print $1,$2}' > imglist.txt $ cat imglist.txt | bash ./echo.sh ・echoコマンドを使ってパイプで渡しても駄目 $ echo `cat imglist.txt` |bash ./echo.sh ・for.shというファイルを作成し、for構文でimglist.txtの中身を渡すと引数が一つずつしか渡らない $ cat for.sh for id in $(cat imglist.txt); do echo $id done $ bash for.sh tile1 jpg tile10 jpg どうやれば、コマンドライン上やシェルスクリプトだけで、今回はファイル名と拡張子という形で複数行からなる2つの引数を渡すことができますでしょうか

    • ベストアンサー
    • Perl
  • 複数の指定フォルダに指定JPEGファイルを一括移動させたいのですが・・

    複数の指定フォルダに指定JPEGファイルを一括移動させたいのですが・・・。 MACのAutomatorを使用して、自動で指定フォルダにファイルを自動で移動させたいのですが、自分で試してうまくいかなかったので、おわかりになられる方いましたら、お力を貸して下さい。 どのような言語を使用すれば複数指定ができるのかがわからなかったので、合わせておききしたいです。宜しくお願いします。 一応、見えにくいかもしれませんが、状況を図にしてみましたので、参考にしてください。

  • shellのコンパイルファイルの見分け方

    いつもお世話になっております。 shellプログラミング(bash)で質問なのですが、 C由来のcgiファイルとperl由来のcgiファイルが混在している環境で perl由来のcgiファイルのみに処理を行うことを想定しております。 そのため、C由来のcgiファイルを除外する必要があるのですが、 除外するための方法(条件式等)ご存知でしたらご教授頂けないでしょうか。 宜しくお願い致します。 if [-f FILENAME] では除外できないですよね…

  • 複数のファイルを一括で指定のフォルダにコピー

    タイトルの通りなのですが、複数のファイルを指定のフォルダに一括でコピーしたいと思っています。何かいい方法はないでしょうか? 理想としましては一つずつファイルの中身を確認しながらコピーしていきたいので、 ファイルを選択するだけで中身が表示されるエクスプローラー風で、さらにコピーしたいファイルはチェックしておいて後で一括でコピーできる といった、ソフトとかないですか??フリーソフトでなくてもかまいません。 よろしくお願いします。

  • 複数のファイルを一括印刷できなくなりました

    今まで複数のファイルを指定して一括で印刷できたのに、今日から出来なくなりました。例えば、4つのファイルを指定したのに、トビトビで2枚しか印刷されません。 詳細設定でなにか変えられるものでしょうか?教えてください。

  • 複数のエクセルファイルの指定範囲をコピーするには?

    複数のエクセルファイルの指定したセル範囲を、一括して他のエクセルファイルにコピーするフリーソフトがあれば教えてください。 例えばA,B,Cという名前のエクセルファイルを、それぞれ1行目だけを抽出して(指定したセル範囲)、Dという新規のエクセルファイルに並べてコピーするといった具合です。

  • 指定した複数のソフトを一括でアンインストールするソフト

    指定した複数のソフトを一括でアンインストールするソフトってありますか? 同時進行でなくてもいいです。次々とアンインストールできれば…。 検索したんですが、中々見つからずです…。