• ベストアンサー

シェルスクリプト ファイルを同名のディレクトリに

カレントディレクトリ以下の数百のファイルに対して、それぞれファイル自身と同じ名前のディレクトリを作成し、そこに格納したいのですが、どのような書き方をすればよいのでしょうか?例えばA,B,Cというファイルがあったとしたら、A,B,Cというディレクトリを新たに作成し、そこにそれぞれA,B,Cを移動したいのです。なにぶんファイルが多いので、自動でできたらなあ・・・と。 Linuxでbashを使っています。どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • Wap58
  • ベストアンサー率33% (29/87)
回答No.1

思いついたまんま書いたんで 事前にテストしてください set `ls -F |grep -v /` for name in $* do mv $name ../ mkdir $name mv ../$name $name/$name done

Mentab
質問者

お礼

期待通りの動作をしました!ありがとうございました。自分もこういうのをサクッと書けるように勉強しようと思います。

関連するQ&A

  • シェルスクリプトの引数について

    test.sh '*.c' といったコマンドを入力した時に、 シェルスクリプト内で引数$1を受け取ったときに$1='*.c'となるのではなく、 カレントディレクトリ内にある'*.c'の正規表現にマッチするファイルが入ってしまっています。 例)カレントディレクト内にaaa.cファイルbbb.cファイルといったファイルがある時は、 $1=aaa.c bbb.cとなっています。 '*.c'の正規表現自体をシェルスクリプト内で受け取る方法はないのでしょうか? シェルはbashを使用しています。

  • シェルスクリプト間で排他をとりたい

    環境 linux(redhat) 使用シェル bash シェルスクリプトAとシェルスクリプトBを作成し、 シェルスクリプトAが動作している間は、シェルスクリプトBの動作を禁止したいと考えています。 例えば、シェルスクリプトAが起動している状態で、シェルスクリプトBが起動されたとき、シェルスクリプトBは、シェルスクリプトAが起動していることを検知して、自発的に処理を終了するようにしたいと考えています。 上記のような仕組みをシェルスクリプトで実現可能でしょうか? 基本的には、シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。 (シェルの異常終了時は、ロックが自動的に解放されることが望ましい) 上記のようなことをシェル(bash)で実現可能でしょうか。 bash単独での方法、もしくはbashからperl,C言語作成の実行モジュールを呼び出す方法でもかまいません。 (ちなみにperl(もしくはC言語作成のモジュール)単独では実現可能なことはわかっています)

  • シェルスクリプト内のcdで、カレントディレクトリを変えるには?

    シェルスクリプト内のcdコマンドで、カレントディレクトリを変えるにはどうしたらいいか?をどうか教えて下さい。 MS-DOSのバッチファイル内で"cd XXXXX"と書き実行した時の動作を、UNIX(CygWin)環境でも行いたいです。 が、シェルスクリプトは(サブシェルで動く為)カレントディレクトリが変わってくれません。aliasコマンド等でいろいろ実験しましたが、DOSバッチファイルのように「バッチファイル単体でディレクトリ移動が出来る方法」を探し出せませんでした。 極めて初歩的とは存じますが、どうか宜しくお願い致します。

  • Linuxのディレクトリーとファイル数の上限

    Linuxのディレクトリー数上限が約32,000、ファイル数上限が約10,000とありますがサブディレクトリーでも同様の制限でしょうか。例として Aディレクトリーの下にBサブディレクトリーとCサブディレクトリーが有る場合ですが、 Bサブディレクトリー:ファイルを10,000作成 Cサブディレクトリー:ファイルを10,000作成 Aディレクトリーから見るとサブディレクトリー経由ですが ファイルを20,000作成している事になりますが問題は無いという事でしょうか。 単純な事ですが、確認しておきたいので宜しくお願い致します。

  • ディレクトリを削除するシェルスクリプト

    Linuxにて、あるディレクトリ内の子ディレクトリの作成日が1ヶ月以上前のものを削除するシェルスクリプトを作成したく思っております。 対象のディレクトリには名前の一部に作成日(YYYYMMDD)を付与していますのでそれを利用してどうにかできないかと考えております。ただ実際にどう実現すればいいか分からず困っています。何か良い案がある方がいらっしゃればご教授願いたく思っております。 OS:REDHAT Enterprise Server4(カーネル:2.6.9-67)

  • シェルでチェンジディレクトリを記述する方法

    Linuxのシェルでチェンジディレクトリコマンドcdで単純に目的のディレクトリに 移動するよう、記述しましたが、カレントディレクトリが移動しませんでした。 正しい書き方を教えて下さい。(初心ですがよろしくお願いいたします) cd /tmp/abc

  • シェルの中からシェルを呼び出して判定

    UNIXで以下のようなシェルが動作しております。 #!/bin/sh su abcdef -c './GHI'; err=$? if [! $err -eq 0 ] then echo エラーが発生しました fi exit このシェルは「abcdef」ユーザに移ってカレントディレクトリのシェルコマンド「GHI」の結果を判定するというものです。 UNIX上では問題なく動作しております。 これをLinuxでそのまま動作させると「err」に「su abcdef」というユーザ切替コマンド自身の正否を格納しているようです。 「'」でくくられた範囲内で結果をファイルに格納したりして、その後ファイルの中を見て判断するとうまくいくことは分かっておりますが、出来たらファイルなど使いたくありません。 このような場合、みなさんどうしてるんでしょうか? よく出てくるパタンだと思うのですがどうしても良い対処が見つかりません。 どうか宜しくお願いします。 Linuxは「miracle-Linux2.0」というOSです、いわゆるRedHat系です。

  • シェルスクリプトの内容について

    業務で使用しているシェルスクリプトの中身に find A/B/ -name File1 -exec mv {}/C/D \; ※AとBとCとDはディレクトリ名、File1はファイル名   という記述があってfindによる検索結果をmvの引数に持ってきて C/D/の直下にFile1を移動している意味はわかったのですが最後尾にある「¥」の意味がよくわかりません。 よろしくお願いします。

  • シェルスクリプトについて教えてください

    以下のようなフォルダ構成があります。 /var/tmp/組織コード/log このlogディレクトリ配下に0byteのファイルがたくさんあり、それを全て定期的に削除したいと思っています。 また、同ディレクトリにはそれ以外のファイルやフォルダも入っていて、それらは絶対に削除してはいけないものです。 以下のようなコマンドを考えたのですが、なにか懸念される点はあるでしょうか? find /var/tmp/*/log -size 0c -exec rm {} \; いろいろ調べたのですが、Linux系は初心者のため、これで妥当かどうか不安なのです。 環境はSolaris11で、bashです。 「組織コード」の部分を固定値にしてコード数分コマンドを書けば確実だとは思いますが、組織コードが増えたり変わるたびにシェルにもメンテが必要になるので、イマイチだと思っています。 詳しい方、ぜひアドバイスしていただけないでしょうか。 よろしくお願いします。

  • あるファイルと同じファイル名のファイルをbashで生成

    OSはLinuxです。 あるディレクトリAにhoge_i(i=1~100)というファイルがあったとします。 別のディレクトリBに、同名のファイル100個を作りたいのですが、 どのようにすればよいでしょうか。 なお、新ファイルの中身は空でもかまいせん。 タイトルではbashと書きましたが、awkでもかまいません。

専門家に質問してみよう