将目录树中的所有文件合并为带有路径分隔符的单个文件

时间:2019-10-02 09:00:35

标签: linux bash macos

例如,我具有以下结构

mydir/a/fileA.txt
mydir/b/fileB.js
mydir/fileC.js
  • fileA.txt内容:Im file A
  • fileB.txt内容:Im file B
  • fileC.txt内容:Im file C

我想(递归地)将mydir目录中所有文件的内容合并到output.txt中-在每个文件内容之前都应包含此分隔符(作为第一行)---next-file->>>:以及该文件的路径(从mydir / ..开始),并用新行换行。因此,上述示例的期望输出应为

---next-file->>>: mydir/a/fileA.txt

Im file A

---next-file->>>: mydir/b/fileB.js

Im file B

---next-file->>>: mydir/fileC.js

Im file C

我尝试了以下代码,但不知道如何在每个文件路径中包含分隔符

find mydir/ -exec cat {} \; > output.txt

3 个答案:

答案 0 :(得分:1)

对于JSONObject pack = new JSONObject(); // new instance pack.put("imgid", resID2); pack.put("desc", descval); Log.d("PERSODEBUG", pack.toString()); trolly.put(itemID, pack.toString()); 命令之间的文本插入,请使用多个cat

-exec

答案 1 :(得分:1)

以下应该是正确的:

find mydir -type f -exec echo -n '---next-file->>>: ' \; -print -exec echo \; -exec cat {} \; -exec echo \; > output.txt

您可以duaIterate.py试试。


一个更干净的解决方案,如果可以使用GNU find:

find mydir -type f -printf '---next-file->>>: %p\n\n' -exec cat {} \; -printf '\n' > output.txt
%p格式的

-printf是指文件的相对路径。

您可以here试试。

答案 2 :(得分:1)

这怎么样?

find mydir/ -type f -exec sh -c '
    for f; do
        printf '--- %s ->>>:\n\n' "$f"
        cat "$f"
        printf '\n'
    done' _ {} +

这应该为每个文件仅创建一个子进程,再为find本身创建一个子进程,为sh创建一个子进程(如果找到的文件多于find,则可以有更多的外壳程序,可以在一个子进程中传递去)。