Shell-Script
將多個子目錄中的多個文件合併為每個子目錄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 腳本,導致這個Desired 輸出
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
這並不完全有效。
劇本:
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
命令時,請確保腳本的結果是您在執行它之前所期望的。
您可以與標誌
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"' _ {} \;