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
良いオプションになります。