質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Q&A

2回答

2062閲覧

シェルスクリプトで複数のディレクトリ名を変数(配列)に入れたい

iii

総合スコア29

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

0グッド

0クリップ

投稿2019/01/28 02:31

サーバーのhogehogeディレクトリ以下に3つのディレクトリがあったとします。
hogehoge
∟201811
201812
201901

この3つのディレクトリ名を変数(配列)に入れたいのですが、どうすればよいでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazto

2019/01/28 02:49

配列に入れたあと何をやりたいか、伺ってもよろしいでしょうか。シェルの配列は扱いにくいため、配列を使わない、という解が一般的です。
iii

2019/01/28 03:34

ご回答ありがとうございます。 配列に入れたディレクトリ名が今月であるか(現在なら201901であるか)を判定し、 今月でなければディレクトリを削除する処理を行いたいと考えています。
KojiDoi

2019/01/28 03:47

日付の処理と配列の必要性との関係がわかりませんね。forループを作ってディレクトリ名をひとつづつ処理していけばいいんじゃないですか?
guest

回答2

0

以下などいかがでしょうか。

Bash

1THISMONTH=$(date +%Y%m) 2for d in hogehoge/* 3do 4 if [ $(basename $d) -ne $THISMONTH ] 5 then 6 rm -rf $d 7 fi 8done

Bash

1誤) 2if [$DIR -ne $THISMONTH ] 3 4正) 5if [ $DIR -ne $THISMONTH ]

[$DIR の間にスペースを入れてください。
[ は独立したコマンドであるので、スペースを入れないと [$DIR という存在しないコマンドとして認識されてしまいます。

投稿2019/01/28 03:49

編集2019/01/28 07:34
kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iii

2019/01/28 04:13

想像通りの処理が出来ました。 ありがとうございました。
iii

2019/01/28 07:09

ちなみに、以下のように$(basename $d) を変数に入れるとエラーになってしまうのですが、 変数に入れたい場合は別の表現にしなければならないのでしょうか? もしよろしければ教えて頂けると幸いです。 THISMONTH=$(date +%Y%m) for d in hogehoge/* do DIR=$(basename $d) if [$DIR -ne $THISMONTH ] then rm -rf $d fi done
iii

2019/01/28 07:45

ご回答ありがとうございました。 実は以下の書き方だと正常に表示されるのですが、 for d in hogehoge/* do echo $(basename $d) done 以下のように書くと「コマンドが見つかりません」と表示されます。 for d in hogehoge/* do YEARMONTH_DIR= $(basename $d) echo ${YEARMONTH_DIR} done
kazto

2019/01/28 07:51

`YEARMONTH_DIR= $(basename $d)` 今度は逆で、変数に値を代入する際は=の前後にスペースを入れてはいけません。
iii

2019/01/28 08:10

ご回答ありがとうございました。頂いた内容で解決しました。 ケアレスミスが続きすみません。。。
guest

0

hogehoge直下にディレクトリしかないのであれば、

Bash

1FOO=(*)

です。ファイルもあり、それを除くなら、

Bash

1FOO=(find hogehoge -maxdepth 1 -type d)

今月でなければディレクトリを削除する処理を行いたいと考えています。

であれば、配列に入れる必要なく、順次処理すれば良いだけだと思います。

投稿2019/01/28 03:46

otn

総合スコア86281

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iii

2019/01/28 04:12

ご回答ありがとうございました。 この方法でも試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問