ksh ディレクトリが空であることを確認してください。

ksh ディレクトリが空であることを確認してください。

AIXでkshのディレクトリが空であることを確認する方法は?

ファイルがあれば削除するだけです。

ベストアンサー1

dirこれは、組み込みのシェル構成のみを使用して無効性をテストするPOSIX準拠の方法です。このsetコマンドは、位置引数をドットファイル(常に存在する.sumを含む..)に設定し、ドット以外のファイルを設定します。ディレクトリが空の場合、.*globは.andにのみ一致し..*globは何も一致しないため、拡張されていません。

set dir/.* dir/*
[ "$1" = "dir/." ] && [ "$2" = "dir/.." ] && ! [ -e "$3" ] && ! [ -L "$3" ]

これはATT kshで機能しますが、特定の省略されたシェル.とエントリでは失敗します。..移植性を高めるには、.*何も一致しないようにする必要があります。

set dir/.* dir/*
case $# in
  0) true;; # can't happen in a standard shell, this is for shells with nullglob
  2) { [ "$1" = "dir/.*" ] && [ "$2" = "dir/*" ] && ! [ -e "$1" ] && ! [ -L "$1" ] && ! [ -e "$2" ] && ! [ -L "$2" ]; } ||
     { [ "$1" = "dir/." ] && [ "$2" = "dir/.." ]; };;
  3) [ "$1" = "dir/." ] && [ "$2" = "dir/.." ] && ! [ -e "$3" ] && ! [ -L "$3" ];;
  *) false;;
esac

最新バージョンのkshを使用すると、より簡単なテストが可能ですが、AIXは古すぎると思います(とはいえksh93)。dir最も近いksh93が空であるかどうかをテストする方法は次のとおりです。

FIGNORE='.?(.)'; set -- ~(N)dir/*; [[ $# -eq 0 ]]

または代替的に

FIGNORE=; set -- dir/*; [[ $# -eq 2 ]]

代替案は を呼び出すことですfind。これはfind、ドットファイルが特に処理されず、単一のファイルに一致するパターンと何も一致しないため、拡張されていないパターンをシェルが区別するのに困難がないため、より簡単です。

[ -z "$(find dir/. -name . -o -print | head -n 1)" ]

おすすめ記事