Bash递归将一个文件附加到另一个文件

时间:2019-02-14 14:33:03

标签: bash

我写了一个bash函数来设置一个新项目时自动执行一系列操作。以下是示例目录结构。我有两个项目,还有一些模板文件和代码。

~/projects
├── template_files/
│   ├── folder_A1/
│   ├── file_A2
│   └── ...
│
├── codepieces/
│   ├── file_X
│   └── ...
│
├── project1/
│   ├── file_X
│   └── ...
│
├── project2/
│   ├── file_X
│   └── ...

bash函数中的一项操作将整个template_files结构复制(添加/覆盖)到项目中。

$ cp -a template-files/. projectX

我想对我的代码做同样的事情,除了不添加或替换外,我想将内容追加到现有文件中(而不像$ echo codepieces/file_X >> projectX/file_x那样一个接一个地完成。

因此,我正在寻找将$ cp -a$ echo codepieces/file_X >> projectX/file_x的功能结合在一起的东西。 project1的结果如下:

~/project1
├── folder_A1/
├── file_A2
├── file_X (original code is appended with codepiece)
└── ...

1 个答案:

答案 0 :(得分:0)

一个简单的bash函数,您可以根据自己的条件进行调整:

cp-a_with-append(){
    if [ ! -d "$1" ] || [ ! -d "$2" ]; then
        echo 1>&2 Usage: cp-a_with_append SRCDIR DESTDIR
    else
        ( cd "$1" && find ) | while read p; do
            pin="$1/$p"
            pout="$2/$p"
            # [ -d "$pin" ] && mkdir -p "$pout"
            [ -f "$pin" ] && [ -f "$pout" ] && cat "$pin" >> "$pout"
            touch -cr "$pin" "$pout"
        done
    fi
}