シェルスクリプトで特定のフォルダに移動する方法

このQ&Aのポイント
  • シェルスクリプトで特定のフォルダに移動する方法についてご教授ください。
  • 特定のフォルダに移動するためのシェルスクリプトを作成していますが、フォルダが一つの場合と複数の場合でどのように書けば良いか悩んでいます。
  • フォルダ名が不規則であるため、選択リスト的なものを表示させて移動させたいと考えています。アイデアやご教授をいただけると幸いです。
回答を見る
  • ベストアンサー

シェルスクリプトについて

シェルスクリプトの勉強中です。 シェルで特定のフォルダに移動するスクリプトを書いているのですが、以下のような場合どうかいていけばいいのでしょうか? [例] /home/hogeの下にフォルダが1つだけある場合 sample01フォルダ →無条件でそのフォルダに移動する /home/hogeの下にフォルダが複数ある場合 sample01フォルダ sample02フォルダ sample03フォルダ →自分で選択して任意のフォルダに移動する  sample02と打ち込めばそこに移動出来るようにしたいです。 hoge配下のフォルダ名が不規則で定まっていない為、 複数ある場合にだけ選択リスト的なものを表示させて、間違えないように 移動させたいなと考えてます。 いい案などありましたら、ご教授いただけますと助かります。 よろしくお願い致します。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.3

No1です。 シェルスクリプトの処理中に移動したいと言うことでなく、コマンドラインでcdコマンドの代替的に使いたいと言うことであれば、 No1で書いたスクリプトを実行するなら、source コマンド(または、"." コマンド)で実行する必要があります。ファイル名だけで実行すると、ディレクトリ変更はそのスクリプトファイルの中だけで有効です。 $ pwd /home/hoge $ No1のスクリプトファイル名 (sample01を選択) $ pwd /home/hoge →もとのまま $ . No1のスクリプトファイル名 → ピリオド+スペース+ファイル名 (sample01を選択) $ pwd /home/hoge/sample01 →移動した 頻繁に使うなら、 alias mycd="source No1のスクリプトファイル名" と、別名定義を.bashrc等に書いておくといいでしょう

satsusatsu1202
質問者

お礼

ご丁寧に追加でご指摘いただきありがとうございます。 いろいろ試行錯誤してなんとか解決しました。ありがとうございます。

その他の回答 (2)

回答No.2

題意に沿った答えはNo1のとおりだと思いますが… ・フォルダが1つだけある場合というのはフォルダ以外に隠しファイルでないファイルは無いのでしょうか。*.coreとか(´・ω・`) ・なぜそのような事をしたいのでしょうか?ということを考えると「選択リスト的なものを表示させて」はシェルの補完機能を使って入力するようにしたらどうですか。 即ち、選択はスクリプトの外で行うようにしたらどうでしょうか。    ↓   % foo.sh {ターゲットのディレクトリ(フォルダ)} というようにディレクトリを引数で取るようにする。   ターゲットのディレクトリはシェルの補完機能で入力する    → foo.sh ~/[TABキーを押す]   みたいなかんじで補完候補が出てきます。   候補の中の先頭の文字を入力してまたTABを押すと候補が絞り込まれていきます。

satsusatsu1202
質問者

お礼

言葉足らずでしたが、隠しフォルダなどはないです。 確かに補完機能を上手く使えば出来ました。ありがとうございます。

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.1

hoge直下にはディレクトリしかないという前提で、 cd /home/hoge if test `ls -1|wc -l` = 1 then cd * else select d in * do cd "$d" break done fi 続きの処理~~

satsusatsu1202
質問者

お礼

遅くなりましたが、hoge直下にはディレクトリしかないので、上記のスクリプトでやりたいことが実現できました。ありがとうございます。

関連するQ&A

  • シェルスクリプト勉強をしています。

    シェルスクリプト勉強をしています。 シェルスクリプトの条件で指定のディレクトリがAAAというディレクトリが1つしかない場合はスクリプト1を実行し終了させる。 AAAAというディレクトリも含めて複数ある場合(BBBというディレクトリのみでも同様)は別のスクリプト2を実行させる。 例として /home/hoge配下にTargetというディレクトリのみの場合は、スクリプトXを実行した後に終了させる。 Targetディクトリや他のディレクトリもある場合はスクリプトYを実行する。 Targetディレクトリ以外のディレクトリのみだけの場合もスクリプトYを実行する。 Targetディレクトリのみの場合というスクリプトの書き方がわからず… どなたか教えていただけると助かります。 よろしくお願いします

  • シェルスクリプトの書き方

    お忙しい所失礼します。 以下の内容のようなことを行うにはどうすればいいでしょうか? (例) /home/testフォルダ直下に以下の3つのフォルダがあります。 ・sampleフォルダ ・sample1111フォルダ ・sample2222フォルダ このファイルをそれぞれ別のディレクトリに移動させます。 ・sampleフォルダ→/usr/testフォルダに移動 ・sample1111フォルダ→/usr/test1111フォルダに移動 ・sample2222フォルダ→/usr/test2222フォルダに移動 これが通常なのですが、sample1111と2222が無いときはコピーを実行しないスクリプトを書きたいのですがどう書けばいいのでしょうか? 手動でやる分には楽なんですけど、100個位フォルダがあり…日によって50の時もあれば100の時もあって…自動化したいのです… もし参考になるサイトなどあれば教えてください。 よろしくお願い致します。

  • ディレクトリ監視シェルスクリプト

    お世話になっております。 現在、特定のディレクトリを監視するという仕事をしております。 そこで、監視を人ではなく、シェル(ツール)化しようと考えております。そこでご相談があります。 以下の手順ができるようなシェルを作成しようと考えております。 ---------------------------------------------------------------- 例) /home配下にディレクトリまたはファイルが追加された場合。 以下の対話処理が走り、yを押すとhoge-serverのサービスが 再起動され、n(y以外)を押すと何もしない。 ↓ echo"/home配下にhogeディレクトリが作成されました。" echo"サービスを再起動しますか?(y/n)" read lm if [ $lm -eq y ]; then /sbin/service hoge-service restart ---------------------------------------------------------------- 肝心の/home配下の監視という部分がよくわかりませんでした。 どなたかわかる方がいたら教えて下さい。 宜しくお願いします。

  • シェルスクリプトのバックアップ世代管理について

    シェルスクリプトで質問です。まだ勉強しはじめなのですが、条件がついた時のファイル削除がわかりません。 どなたか教えていただけると助かります。 やりたいことは以下です。 /home/hogeフォルダ内に以下のファイルがあります。 sample20150101 sample20150102 sample20150103 otherXX otherYY otherYYYYMMDD 他にも多数 この中からsampleファイルでファイル名の後ろについている日付が古いものを削除したいです。 ただし、更新日がファイル名の末尾にある日付とは限りません。 またsampleYYYYMMDDは末尾の日付が直近の3ファイル(3日分)は残したいです。 他のファイルには影響ないようにしたいとも考えてます。 ネットで調べて更新日で世代管理はなんとか出来たのですが、ファイル名で判定するやり方がわからず… こういった場合、どのようにスクリプトを書けばいいのでしょうか? まだ勉強しはじめたばかりなので知識がなくて申し訳ないのですが、教えていただけると助かります。 よろしくお願いします。

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

    シェルスクリプトを勉強しています。 hoge.txt内で"AAA"という文字列を"BBB"という文字列を検索し下記のような処理を行いたいです。  (1)AAA・BBBともにある場合  →スクリプトを続行  (2)AAA・BBBともにない場合  →スクリプトを停止  (3)AAAしかない場合  →BBBがありませんというメッセージを流す    (4)BBBしかない場合  →AAAなしでスクリプトを続行しますというメッセージを流す   シンプルなやり方でいいので上記のようなことを行いたい場合、どのようにスクリプトを書けばいいのか教えてください。 よろしくお願いします。

  • シェルスクリプトの切り替え?

    シェルには種類がありユーザーはそれを切り替えることによって好みのシェルを自由に選択することが出来る。 というのはわかりました。 が、シェルスクリプトを記述して実行する場合はどうなんでしょう。 bornシェルで記述したシェルスクリプトをcshから実行できるのでしょうか。 実行者とスクリプト記述者が同じシェル環境で操作しないといけないのかと思い質問しています。 ひょっとして意味のわからない質問かも知れませんがお願いします。

  • あるシェルスクリプト内にある関数を、別のシェルスクリプトから呼ぶ事はできる?

    件名の内容を具体的に申し上げると下の通りです。 あるシェルスクリプトから、その同一シェルスクリプト内にある関数を呼ぶ方法は既知です。が、他のシェルスクリプトにある関数を呼ぶ方法を知りません。方法が在る場合、簡単な文法をお教え頂けると幸いです。 以上どうぞ宜しくお願い致します。

  • シェルスクリプト コマンドを変数にした時の呼び方

    はじめまして、シェルスクリプトを勉強中の者です。 コマンドを変数にいれて、まとめました。 しかしコマンドの変数を呼びこもうとするとエラーになります。 ============================================ #!/bin/sh GREP="grep" cat "${GREP} '^[0-9]' /home/hoge/test.nicdf" ============================================ ================ シェル実行結果 ============= $ ./test.sh cat: grep '^[0-9]' /home/hoge/test.nicdf: そのようなファイルやディレクトリはありません どう書けば、エラーにならずに正常に動作するでしょうか? ご教授の程よろしくお願いします。

  • PHP シェルスクリプト 引数

    失礼します。現在PHPからシェルスクリプトを引数を付けて実行し、戻り値で確認が出来るか試しているのですがなかなか参考になる記事がなく実現が出来ない状態です 調べたところ、 phpからhoge.shというシェルファイルをargという引数で実行したいとします。 引数を"'. .'"で囲う事で、引数を渡せるようです。 $output = shell_exec('/bin/sh /path/to/hoge.sh "'.$arg.'"') var_dump($output) 上記のような記事を見つけたのですがhoge.shはどのように$argを受け取り、戻り値を渡しているのでしょうか?また、$argの値の中身は渡す引数の内容という認識で正しいのでしょうか?サンプルコードなどがあるとうれしいです。 ご教授よろしくお願い致します。

  • bashのシェルスクリプトの書き方

    macos x 10.5.5です。 あるコマンドを実行すると"y/n"を聞いてきます。コマンドラインから実行した場合は、単純にキーボードから"y"などと入力すれば済むわけですが、これをbashのシェルスクリプトでやる場合はどう書けば良いのでしょうか。尚、"y/n"に対する応答(キー入力)は常に"y"で構いません。 >hoge delete file1 -- hogeというコマンドを実行 >Are you sure ? ( enter y/n ) -- hogeが確認を要求 >y -- キーボードからyを入力 よろしくお願いします。