合并每个文件夹Unix中的文件(cat)

时间:2012-03-22 20:40:03

标签: file unix merge cat

在我的主文件夹中,我有多个子文件夹,每个子文件夹包含多个文件。我想在每个子文件夹中合并这些文件。

所以我想尝试做这样的事情:

cd ../master-folder

for file in $( find . -name "*.txt" );
do
cat "all the text files in this sub folder" > "name of the subfolder.txt"
rm  "all the previous text files excluding the merged output obviously"
    done

感谢您的帮助!谢谢。

2 个答案:

答案 0 :(得分:3)

如果文件的顺序无关紧要,我会这样做:

for i in $(find -maxdepth 1 -mindepth 1 -type d)
do
    find $i -name '*.txt' -type f -exec cat {} >> $i-list.txt \;
    find $i -name '*.txt' -type f -exec rm {} \;
done

第一个查找子目录。

第二个将所有子文件的内容附加到文件

第三个删除子文件。

如果存在递归子目录,则不起作用。如果需要,请删除'-maxdepth 1'

答案 1 :(得分:2)

为什么不递归访问每个目录?有点像:

#!/bin/bash                                                                     

shopt -s nullglob # Make failed globs expand to nothing

function visit {
    pushd "$1"
    txts=(*.txt)
    if ((${#txts[@]} > 0))
    then
        cat "${txts[@]}" > "${PWD##*/}.txt"
        rm -f "${txts[@]}"
    fi
    for dir in */
    do
        visit "$dir"
    done
    popd
}

visit /path/to/start/dir

警告:如果您的sym链接在目录树中创建了循环,那么这是一个坏主意。