ファイルをインポートし、そのファイルに対していくつかの操作を実行するためにサブディレクトリを繰り返します。

ファイルをインポートし、そのファイルに対していくつかの操作を実行するためにサブディレクトリを繰り返します。

フォルダを繰り返してファイルをインポートし、そのファイルを操作して、ファイルと同じ名前のテキストファイルに出力をリダイレクトしようとしています。 「検索」を使ってみました -

cd /filepath/orig/v1

for dir in $(find . -type d); do
  cd $dir
  for subdir in $(find . -type d); do
          cd $subdir
          for file in `ls`; do
                  echo $file
                  touch $file.txt
                  cdo info $file > $file.txt
          done
  done
done

しかし、これはうまくいきません。ディレクトリ構造は - /filepath/orig/v1/level1/level2/file.nc と似ていますが、サブディレクトリは 2 つ以上のレベルを持つことができます。

ベストアンサー1

これにはループは必要ありません。検索はすべてを行います。

find . -type f ! -name '*.txt' -print -exec sh -c 'cdo info {} > {}.txt' \;

これにより、既存の.txtファイルが破損するため、「* .txtではない」よりも具体的なファイル名フィルタを使用する必要があります。

おすすめ記事