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

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

ただいまの
回答率

90.48%

  • シェル

    283questions

    シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

*がついたファイルの存在確認ができません

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 826

移動元ディレクトリ、対象ファイルが記載されていた外部ファイルがあます。
対象ファイルは以下の3つのです
・sample.txt
・*.log
・*

変数には以下の内容が入っています。
Aには移動元ディレクトリ
Bには対象ファイル名

そして移動先ディレクトリとその中にある対象ファイルの存在確認を行ったのですが
・sample.txt
これは存在確認をすることができました。

しかし以下の2つは存在確認することができませんでした。
・*.log
・*
ディレクトリもファイルも実在しています。

#!/bin/shif [[ -e ${A}/${B} ]]; then
 echo -e "対象ファイルを発見しました\n"
else
  echo -e "対象ファイルを発見できませんでした\n"
fi
:
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

以下/bin/shがbashであるという前提でコメントしてみます(※)。

[[ 式 ]]と記述した場合の意味はmanを参照すると次のように書いてありました。

[[ expression ]]
Return  a  status  of  0 or 1 depending on the evaluation of the
conditional expression expression.  ...
Word splitting and pathname expansion are not performed on  the words  between  the  [[  and  ]]; tilde expansion, parameter and
variable expansion, arithmetic expansion, command  substitution,
process  substitution,  and quote removal are performed.  ...
-- man bash より --

[[ ]]の内側ではパス名の展開は行われないとのことです。ゆえに[[ -e * ]]の意味は「アスタリスク1文字の名前のファイルが存在するか?」という意味になると思います。

おそらく質問者さんの意図は「*というパターンのファイルが一つ以上存在するか?」ということではないでしょうか?もしそうならば[[ -e * ]]ではなく違う手段を工夫すべきだろうと思います。

例えばファイルとして存在しているかを確認するなら

files=`find ディレクトリー -depth 1 -type f -name '*' 2>/dev/null`
if [ -z "$files" ] ; then
  あった
else
  なかった
fi


とか・・・


※: #!/bin/sh

#!/bin/shと行頭に記述するとそれは「borne shellでも動くスクリプト」という意味合いを込めてで書くことが多いと思います。しかしif [[...]]という記述は少なくともbashでは使えますがborne shellでは使えないような気がします。(違ってたらすみません)

実際の環境によって/bin/shがどのシェルになっているかは違うと思うのでもし/bin/shがbashであればif [[...]]という記述も動くと思います。
実際のところあなたの環境の/bin/shが一体どのシェルなのか自分にはわかりません。Ubuntuではdashかも知れませんし、Windowsのcygwinだとbashだったりします・・・

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/25 18:24

    [[]]このようにしたのは「」だと引数が多すぎますとエラーが出てしまっていたのでこのような記述をしました。
    この解決策は間違いだったでしょうか?

    キャンセル

  • 2017/06/25 18:30

    2つの点に問題を感じます。
    (1) #!/bin/shを意識していない点
    (2) [[]]の使い方を把握せずにエラーが出なければよしとした点

    (1)は最初は「動けば結果オーライ」かも知れませんが(2)はいただけません。「そうかいたらどういう意味になるか」をできる限り理解して書かなければならないと思います。

    キャンセル

  • 2017/06/25 18:50

    アドバイスになりそうな気がする点を確認したいのですが
    ls *.log
    と書いたらファイル名を展開しているのはlsではなくshであることをご存知でしょうか?

    if [ -e *.txt ] ; then...
    とかいたとき、a.txt, b.txtが存在している場合上の文はshによって
    if [ -e a.txt b.txt ] ; then ...
    に置き換えられた上で実行されることは大丈夫でしょうか?またこの文は
    if test -e a.txt b.txt ; then ...
    となり、まず最初にtest -e a.txt b.txtが実行されるという点は大丈夫ですか?
    さらにtest -e ファイル名
    では「ファイル名には単一のファイルしか指定できない」ことはどうでしょう?この辺りが曖昧だったりしないでしょうか?

    キャンセル

0

しかし以下の2つは存在確認することができませんでした。
・*.log
・*
ディレクトリもファイルも実在しています。 

普通は、*.logというのは、「ファイル名が.logで終わるファイル」、*というのは「すべてのファイル」を意味しますが、存在確認したいのは、「ファイル名が*.logであるファイルがあるか?」ですか?「ファイル名が.logで終わるファイルが一つでもあるか?」ですか?

また、

Aには移動元ディレクトリ

と、

移動先ディレクトリとその中にある対象ファイルの存在確認を行ったのですが
-e ${A}/${B} 

とは矛盾しますが、Aは移動元か移動先かどちらですか?それで、存在確認したいのは、移動元ですか?移動先ですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • シェル

    283questions

    シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。