「[:引数が多すぎます」のため、Linuxコマンドは失敗します。

「[:引数が多すぎます」のため、Linuxコマンドは失敗します。
DIR=/u01/app/tomcat/apache-tomcat-9.0.43/work
if [ $(ls -A $DIR) ]
then
        echo 'Folder is not empty'
else
        echo 'Folder is empty'
fi

うまく動作し、出力は次のとおりです。

フォルダが空ではありません。

ただし、/ temp を試みると失敗します。エラー発生

DIR=/u01/app/tomcat/apache-tomcat-9.0.43/temp
if [ $(ls -A $DIR) ]
then
        echo 'Folder is not empty'
else
        echo 'Folder is empty'
fi

[: パラメータが多すぎてフォルダが空です。

/ tempが機能しない理由[: 引数フォルダが多すぎるエラーは、フォルダが空でない場合にのみ発生します。

ベストアンサー1

構文解析しないという意見はls正しいです。ただし、この狭い例では参照に問題があります。

これは働きます:

if [ "$(ls -A $DIR)" ]
then
        echo 'Folder is not empty'
else
        echo 'Folder is empty'
fi

しかし、これはさまざまな理由で問題を解決するための本当に悪い方法です。

選択肢は次のとおりです(もちろん、他の多くの選択肢もあります)。

if find "${DIR}/" -maxdepth 1 -mindepth 1 | head -1 | grep -Eq "^.|^$"
then
        echo 'Folder is not empty'
else
        echo 'Folder is empty'
fi

ここで理論は、head -1単一の項目が見つかるとすぐにパイプラインが停止するため、ディレクトリに項目が多いと時間が節約されます。

grep -q "^.|^$"確認しました(または空行) 前のコマンドから返されました。

または...

別の方法は、ディレクトリ内の「リンク」の数を調べることです。空のディレクトリには、特別な項目と.項目のそれぞれに正確に2つあります..

牛に似た一種の栄養stat

if stat --printf %h "${DIR}/" | grep -qvFx 2
then
        echo 'Folder is not empty'
else
        echo 'Folder is empty'
fi

MacOSネイティブstat

if stat -f %l "${DIR}/" | grep -qvFx 2
then
        echo 'Folder is not empty'
else
        echo 'Folder is empty'
fi

どちらも、オペレーティングシステムまたはファイルシステムがディレクトリハードリンクを防止し、空の場合に両方のリンクを報告すると仮定します。 2つのうちの1つ以上がそうでない場合、ソリューションはよりfind良いオプションになります。

おすすめ記事