【问题标题】:sync/copy folders from source dir only if folders exist in target dir仅当目标目录中存在文件夹时,才从源目录同步/复制文件夹
【发布时间】:2012-11-23 18:37:46
【问题描述】:

我正在尝试在 ubuntu 中编写一个 bash 脚本来复制一些文件。我正在开发一个小型 Android 项目,我每周都在翻译应用程序。我对 bash 脚本非常陌生,所以请多多包涵;)

我希望我的脚本检查目标目录并查看我的源目录是否包含相同的文件夹。如果是这样,它应该将我的源文件夹复制(并在需要时覆盖)到目标目录,并保留结构。但还要添加我在这些源文件夹中可能拥有的任何额外文件和文件夹。

假设我的源目录中有文件夹 1、文件夹 2、文件夹 3,但目标目录中只有文件夹 1 和文件夹 2。然后我只需要从源目录复制到目标目录的文件夹1和文件夹2。

目标目录的内容经常变化,这就是为什么我需要在复制文件夹/文件之前进行检查。

顺便说一句,源目录和目标目录中的文件夹都被命名为:folder1.apk - 它有一个扩展名,所以它看起来像一个文件..

希望我提供了足够的信息;)

编辑:

我最终这样做了:

    for dir in `find * -maxdepth 0 -type d`; do
    cp -r -f /source/$dir /destination
    done

不知道这是否是最好的方法,但似乎可以完成这项工作;)

【问题讨论】:

    标签: bash if-statement copy


    【解决方案1】:

    您可能会看看rsync 工具,它有很多选项且易于使用(无需使用自己的脚本)。例如,对您的情况有用的选项之一:

    --existing              skip creating new files on receiver
    

    所以,以下应该可以完成工作:

    rsync -vur --existing ~/project/source /mnt/target/
    

    如果您需要或什至将其用作守护程序来自动同步文件,您可以通过网络以相同的方式同步文件。

    【讨论】:

    • 谢谢。但是这个问题是,如果我在源目录和目标目录中有匹配的目录,我有时会在主文件夹中的源中有额外的/新文件和文件夹,然后不会被复制过来。它是决定是否应该复制内容的主/顶级文件夹。
    • 你也可以rsync src/* dst/
    • @user1170663 我相信您可以通过使用它的选项来实现目标,例如 --files-from=FILE 选项允许指定您需要同步的确切文件的列表。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2021-06-07
    • 2018-05-19
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多