在我的主文件夹中,我有多个子文件夹,每个子文件夹包含多个文件。我想在每个子文件夹中合并这些文件。
所以我想尝试做这样的事情:
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
感谢您的帮助!谢谢。
答案 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链接在目录树中创建了循环,那么这是一个坏主意。