複数のサブディレクトリにある複数のファイルをサブディレクトリごとに1つのファイルにマージし、元のファイルを削除します。

複数のサブディレクトリにある複数のファイルをサブディレクトリごとに1つのファイルにマージし、元のファイルを削除します。

ディレクトリ構造

DIR
        SUBDIR1
                    11-01-11.txt
                    13-05-23.txt

        SUBDIR2
                    12-05-56.txt
                    13-04-02.txt
                    15-04-06.txt

これを達成するためにbashスクリプトを作成したい希望の出力

DIR
        SUBDIR1
                    sub_dir1_merged.txt

        SUBDIR2
                    sub_dir2_merged.txt

元のディレクトリ構造を維持し、各ファイルをsub_dirname_merged.txtファイルにマージし、元のファイルをすべて削除したいと思います。

私は次を試しましたパスワード

for f in */
do
cat $f/*.txt > "$f"/$f_merged.txt
rm $f/*.txt 
done

これは正しく機能しません。

ベストアンサー1

スクリプト:

for f in */*.txt; do 
  cat "$f" >> "$(dirname "$f")/$(dirname "$f")_merged.txt" 
  rm "$f"
done

サブディレクトリのtxtファイルを繰り返します。

for f in */*.txt; do 

$(dirname "$f")

ファイル名とファイル保存パスの両方に使用されるtxtを含むフォルダの名前を返します。


rm "$f"

ファイルを削除します。コマンドを使用する場合は、rmスクリプトを実行する前に、スクリプトの結果が予期したものと同じであることを確認してください。

おすすめ記事