【问题标题】:[Unix][Shell Script] Copy all files from one folder to the other[Unix][Shell 脚本] 将一个文件夹中的所有文件复制到另一个文件夹
【发布时间】:2018-10-05 11:45:54
【问题描述】:

我正在尝试为日常 cronjob 创建一个 bash shell 脚本。

该脚本是将所有带有txt扩展名的文件(包括子目录)从文件夹“fromDir”复制到文件夹“toDir”。

如果“toDir”目录不存在,它也会创建它。

我在这里尝试使用 tar 压缩文件并在移动后解压缩以加快传输过程中花费的时间,目标文件夹应该与原始文件夹具有完全相同的结构。

#!/bin/bash -l

fromDir='c:/fromFolder/' ;
toDir='c:/toFolder/' ;
find $fromDir -maxdepth 3 -name '*.txt' -print |
tar zcvf - -T - |
mkdir -p -m 777 $toDir ;
cd $toDir && tar zxvf -

【问题讨论】:

  • 你不能在|tar之间使用;!首先创建您的新目录,然后使用 tar-C arg 而不是 cd
  • 知道了!现在对我来说很有意义

标签: shell unix


【解决方案1】:

如果你可以使用rsync,你可以试试这个:

rsync -av --include="*/" --include="*.txt" --exclude="*" ~/from/ ~/to/ --dry-run

这可以解释为使用*.txt 包含每个目录并排除其他任何内容(顺序很重要)

--dry-run 选项只是打印将要执行的操作,但不会复制任何文件。

【讨论】:

    【解决方案2】:

    第一次看到我的评论,那么如果你 tar 不支持 -C 参数(在 tar 之前更改为 dir),你可以试试这个:

    #!/bin/bash
    
    fromDir='c:/fromFolder/' ;
    toDir='c:/toFolder/' ;
    mkdir -p -m 777 $toDir ;
    find $fromDir -maxdepth 3 -name '*.txt' -print |
    tar zcf - -T - | (
        cd $toDir
        tar zxvf -
    )
    

    【讨论】:

    • 非常感谢您的快速帮助!效果很好!
    • 请考虑赞成和/或接受回答,而不是Thanks cmets!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2013-11-20
    • 2014-09-17
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    相关资源
    最近更新 更多