合并文件(猫)在每个文件夹的Unix

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

所以我试图做这样的事情:

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 

感谢帮助! 谢谢。

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

 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 

第一个find查找子目录。

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

第三个删除子文件。

如果有递归子目录,这不起作用。 如果你想这个,删除'-maxdepth 1'

为什么不能以递归方式访问每个目录? 有些东西是:

 #!/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链接,那么这是一个坏主意。