Bash - 在分开的子文件夹中合并文件
因此,我正在寻找一种方法来将多个子文件夹中的.html文件保存在自己的位置。Bash - 在分开的子文件夹中合并文件
实际情况:
$ Folder1
.
├── Subfolder1
│ └── File1.html
└── File2.html
├── Subfolder2
│ └── File1.html
└── File2.html
期望的结果:
$ Folder1
.
├── Subfolder1
│ └── Mergedfile1.html
└── File1.html
└── File2.html
├── Subfolder2
│ └── Mergedfile2.html
└── File1.html
└── File2.html
到目前为止,我想出了这个:
find . -type f -name *.html -exec cat {} + > Mergedfile.html
但这种结合了所有的所有文件Folder1子文件夹,而我想让他们分开。
非常感谢!
像由AK_说,你可以用找到的exec。
find Folder1/ -mindepth 1 -maxdepth 1 -type d -exec sh -c "rep='{}';cat "'"$rep"'"/*.html > "'"$rep"'"/Mergedfile.html" \;
你不能使用'{} “就这样!这是危险的,并不适用于所有版本的“find”。危险:如果有一个名为''的文件会发生什么? rm -rf /#'? POSIX明确指出[如果utility_name或参数字符串包含两个字符“{}”,但不是两个字符“{}”,则它是实现定义的,find是否会替换这两个字符或不改变地使用该字符串。] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html)。所以你使用'{}'是危险的,不正确的。 –
这工作完美! Justed运行另一个命令,以便在战后再添加子文件夹名称。非常感谢@ctac_! – Hugo
您可以循环在具有for
声明所有子文件夹:
for i in Folder1/SubFolder*; do
cat "$i"/File*.html > MergeFile$(echo "$i" | sed 's,.*\([0-9]\+\)$,\1,').html
done
我想你想要的是'-maxdepth 1个型D'到你的'find'命令:) –