• ベストアンサー

シェルスクリプトで「ディレクトリが存在したら~する」の表現は?

unixのシェルについて質問です。 「ディレクトリaaa配下に任意のディレクトリ(ファイルではなく何かしらのディレクトリ)が在ったらpwdする」 という条件式はどう書いたらよいのでしょうか? イメージとしては以下しか浮ばないんですが間違ってますよね… すみません、よろしくお願いいたします。 if [ -d aaa/*] then  pwd fi

noname#249638
noname#249638

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

  • ベストアンサー
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

for ループなどを使用して、そのディレクトリにあるすべてのファイルを -d $file で聞いてまわれば良いのでは? シェルの種類を書くと、誰かがサンプルを回答してくれるかもよ。

noname#249638
質問者

お礼

そうでしたね!解決しました! ありがとうございました!

その他の回答 (2)

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

時間をかけていいなら find aaa -type d |grep aaa/. で出力を捨てればいいかも. GNU find なら -maxdepth/-mindepth でもっと速くできます. あとは #1 のように for でまわして -d かな.

noname#249638
質問者

お礼

#1さんのやり方で解決いたしました!ご回答ありがとうございました!

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

unixというのは具体的には何ですか? それとも、全てのUNIXで通用する方法が欲しいんですか? もしかして、linux(linuxはUNIXではありません)での解決法ですか?

noname#249638
質問者

お礼

解決いたしました!ご回答ありがとうございました!

関連するQ&A

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

    お世話になっております。 現在、特定のディレクトリを監視するという仕事をしております。 そこで、監視を人ではなく、シェル(ツール)化しようと考えております。そこでご相談があります。 以下の手順ができるようなシェルを作成しようと考えております。 ---------------------------------------------------------------- 例) /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配下の監視という部分がよくわかりませんでした。 どなたかわかる方がいたら教えて下さい。 宜しくお願いします。

  • [if文]ファイル/ディレクトリの存在有無について

    [if文]ファイル/ディレクトリの存在有無について教えて下さい。 「あるディレクトリ配下にファイル、ディレクトリがない場合、 エラーを出力。」を目的に以下のシェルを作成しました。 if [! -f $DIR/* -a ! -d $DIR/*] nodataend fi しかし、あるディレクトリ配下に複数のファイルが存在すると正常に処理されません。 この場合、どのような条件で指定すればいいのでしょうか。 個人的には条件で指定している*が問題ではないかと思います。 宜しくお願いします!

  • ディレクトリをコピーするツールを作ってますけど、うまくいきません。

    ディレクトリをコピーするツールを作ってますけど、うまくいきません。 何方か教えてください! 内容:1、「~/???.tmp」というディレクトリを検索し指定ディレクトリにコピーする。    2、「~/???」というディレクトリも合わせて指定ディレクトリにコピーする。    3、 指定ディレクトリから2階層下にある「aaa」ディレクトリ直下を対象とする。    4、 コピーしたディレクトリを表示する。 使い方:./cptmpDir.sh path1 path2  [-c] 引数: path1 は対象ディレクトリ     path2 はコピー先ディレクトリ -c 指定されていればディレクトリのコピーを行う。 例え以下のようなディレクトリがあるとする。 home/ccc/bbb/aaa/abc.tmp home/ccc/bbb/aaa/abc home/ccc/bbb/aaa/cba home/ccc/bbb/aaa/ddd/efg.tmp home/ccc/bbb/aaa/ddd.tmp ./cptmpDir.sh  /home  /var/tmp [-c] を実行したら home/ccc/bbb/aaa/abc.tmp home/ccc/bbb/aaa/abc home/ccc/bbb/aaa/ddd.tmp が/var/tmpにコピーされるのが正常の働き。 私が書いたシェルは 内容1、3、4、はできたけれども 2、ができてません。 だからhome/ccc/bbb/aaa/abcがコピー対象がになっています。 以下は私が書いたシェルである。 #!/bin/ksh if [[ $# -lt 2]] then echo "usage: $0 path [-c]" exit 1 fi path2=$2 copydir=0 if [[ $3 = "-c" ]] then copydir=1 fi find $1 -maxdepth 3 -mindepth 3 -type d -name "aaa" | ¥ while read d do find $d -maxdepth 1 -mindepth 1 -type d -name "*.tmp" | ¥ while read a do if [[ $copydir -eq 1 ]] then cp -r $a $path2 echo "cp" "${a#*/}" else echo "${a#*/}" fi done done よろしくお願い致します!。 home/ccc/bbb/aaa/abcもコピーされるように!!!

  • シェルスクリプト

    2月14日頃質問のあった”UNIXのシェルスクリプトを使用してテキストファイルのある列にある特定の文字列を条件としてその行を出力するということをやりたい”を下記のように作ってみました。問題ないか逆質問の形で投稿します。(ルール違反かもしれませんが質問が締め切られているので・・・) #!/bin/bash CAT=YAHOO while read LINE do echo $LINE > tmp.txt DOG=`cut -d" " -f2 tmp.txt` if [ "$CAT" = "$DOG" ] then echo "$LINE" fi done < catalog.file

  • 以降のスクリプトを実行せずに終わるシェルスクリプトの書き方

    Linux上で動かす以下のようなシェルスクリプトを作っています。 ▼------------------------------- if [ -d /home/aaa ]; then   処理1 else   処理2 fi 処理3 ▲------------------------------- この場合、/home/aaaが存在するかどうかに関わらず、 「処理3」は実行されてしまいます。 これを、 「/home/aaaが存在しない場合は処理2を行ってからスクリプトを終了する」 といった内容にしたいです。 現状はそれの書き方が見つからないので、処理1の次の行に処理3を書き込んで同じ結果にしています。 (そのためどんどんif文の階層が深くなり、全ての記述がif文の中に入っていく・・・) エクセルのVBAで言うところの、Exit Sub に該当する記述が理想的です。 そのような書き方がありましたら教えてください。

  • シェルスクリプトのテスト

    年が変わるとシェルの処理も替わります。 例えば: year=`date +%Y` if [ $year=2006 ];then echo "year 2006" fi if [ $year=2007 ];then echo "year 2007" fi テストをしたいですが、 2007年のテストは出来ますでしょうか? 教えてください!お願いします。

  • if [ 条件式 ]とif[[ 条件式 ]]

    シェルスクリプトでのif [ 条件式 ] と if [[ 条件式 ]] の違いについて教えてください。 以下のシェルスクリプトを実行すると、 意図したとおり、111 と出力されます。 =========▼▼(ここから)▼▼========= #!/bin/sh AAA=yes if [[ "$AAA" = [yY]* ]] then echo 111 else echo 222 fi =========▲▲(ここまで)▲▲========= 上記、スクリプト3行目の if [[ "$AAA" = [yY]* ]] の部分を if [ "$AAA" = [yY]* ] というように、角カッコ 1重にすると、 エラーは発生しませんが、 222と表示されます。 if [ 条件式 ] と if [[ 条件式 ]] の違いについて教えていただけないでしょうか。

  • シェルスクリプトでの絶対パスの取得

    UNIXのシェルスクリプトで、引数として渡された相対パスから絶対パスを取得するには、そうすればよいでしょうか。 cd 相対パス 変数=`pwd` これが一番普通のやり方でしょうか。 change directory しなくてもできる方法がないのかなあと思ったもので。

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

    Bashシェルスクリプトの書き方 ↓のx.shはどこが間違っているのでしょうか? $ cat x.sh #!/bin/bash function x() { local dir if $1; then dir=$1 else dir="." fi `find $dir -type d` } ↓こうなります $ source x.sh $ x dir dir: command not found bash: .: ./dir: はディレクトリです

  • シェル作成手伝ってください><

    会社に入社して3年目。 シェル作成はまだド素人であり、期日がもうせまっており とても困っております。 よかったら助けてくれませんか??? 内容は下記を参照ください。 <シェル内容> ・coreファイル削除をシェルにて削除したい。 ・削除対象ディレクトリ←ここにファイルが作成されます。 →/home/xxxx/配下 できればfindにてcoreファイルを参照してファイルがあれば 削除し、なければそのまま何もせずに終了する。 ちなみにUNIXでcshで作成してほしいと言われました。 ついでといっては失礼と思いますが、続けてif文のココもわからないのでできたら教えてください。 if ( 変数 )then 変数がわからんです。 本当に唐突的ですがお早めの回答よろしくお願いいたします。

専門家に質問してみよう