すべてのサブディレクトリを繰り返し、Unixシェルスクリプトでいくつかの操作を実行します。

すべてのサブディレクトリを繰り返し、Unixシェルスクリプトでいくつかの操作を実行します。

私のシェルスクリプトが私のホームディレクトリ内のすべてのサブディレクトリにアクセスできるようにしたいです。ディレクトリでいくつかのタスクを実行し、出力をスプールファイルに送信してから、次のディレクトリに移動します。デフォルトディレクトリ= /tmpサブディレクトリ= ABCD(サブディレクトリ4つ)を考えてみましょう。

ベストアンサー1

forループを使用してください。

for d in $(find /path/to/dir -maxdepth 1 -type d)
do
  #Do something, the directory is accessible with $d:
  echo $d
done >output_file

そのディレクトリのサブディレクトリのみを検索します/path/to/dir。ディレクトリ名にスペースや特殊文字が含まれている場合、上記の簡単な例は失敗します。より安全なアプローチは次のとおりです。

find /tmp -maxdepth 1 -type d -print0 |
  while IFS= read -rd '' dir; do echo "$dir"; done

または単純にbash

for d in /path/to/dir/*; do
  if [ -d "$d" ]; then
    echo "$d"
  fi
done

(逆に、findディレクトリへのシンボリックリンクも考慮し、隠されたシンボリックリンクは除外します。)

おすすめ記事