私ディレクトリ構造
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
スクリプトを実行する前に、スクリプトの結果が予期したものと同じであることを確認してください。
答え2
find
ロゴと一緒にお使いいただけます。-execdir
次のように簡単になります。
find DIR/ -type f -execdir bash -c 'cat -- $1 >> "${PWD##*/}_merged.txt"' _ {} \;
上記のコード行を少し変更して元のファイルを削除しました。
find DIR/ -type f -execdir bash -c 'for f; do cat -- $f >> "${PWD##*/}_merged.txt"; done; [[ $f != *${PWD##*/}* ]] && rm -v "$f"' _ {} \;