【问题标题】:I want to copy different folders & a file in them (same for all folders) to another folder - unix我想将不同的文件夹和其中的文件(所有文件夹都相同)复制到另一个文件夹-unix
【发布时间】:2015-08-30 12:32:58
【问题描述】:

假设我有多个文件夹,每个文件夹中有很多文件,但我感兴趣的文件是“xyz.p”:

~/home/A/xyz.p

~/home/B/xyz.p

~/home/C/xyz.p

~/home/D/xyz.p

现在我想将这些文件夹中的每一个都复制一个文件“xyz.p”到另一个目录:

~/trial/A/xyz.p

~/trail/B/xyz.p

~/trail/C/xyz.p

~/trail/D/xyz.p

我不想复制文件夹 A、B、C、D 中的其他文件。

现在我已经尝试过长时间使用 shell 脚本,但它并没有真正起作用。

【问题讨论】:

    标签: linux shell for-loop copy directory


    【解决方案1】:

    我发现解决这个问题最简单的方法是编写一个简单的脚本。

    #!/bin/bash
    
    STARTDIR="home"
    TARGETDIR="test"
    
    FILENAME="xyz.p"
    
    for DIR in 'A' 'B' 'C' 'D';
    do
      cp -rfv $STARTDIR/$DIR/$FILENAME $TARGETDIR/$DIR/$FILENAME
    done
    

    此脚本从 startdir/subdir 获取文件并放入 targetdir/subdir 目录。

    子目录可以放在for命令行的单引号中。

    -rfv 表示复制将是递归的(包括所有子目录)、强制的和详细的(告诉你它在做什么)。

    这个脚本的输出对我来说是

    $./moveit.sh
    `home/A/xyz.p' -> `test/A/xyz.p'
    `home/B/xyz.p' -> `test/B/xyz.p'
    `home/C/xyz.p' -> `test/C/xyz.p'
    `home/D/xyz.p' -> `test/D/xyz.p'
    

    希望这对您有所帮助。
    在询问之前请尝试做更多的研究:)

    【讨论】:

      【解决方案2】:

      使用 GNU Parallel 它看起来像这样:

      parallel 'mkdir -p ~/trial/{//}; cp {} ~/trial/{//}' ::: */xyz.p
      

      GNU Parallel 是一种通用的并行化器,可以轻松地在同一台机器上或在您可以通过 ssh 访问的多台机器上并行运行作业。它通常可以替换 for 循环。

      如果您想在 4 个 CPU 上运行 32 个不同的作业,那么并行化的直接方法是在每个 CPU 上运行 8 个作业:

      GNU Parallel 会在完成后生成一个新进程 - 保持 CPU 处于活动状态,从而节省时间:

      安装

      如果没有为您的发行版打包 GNU Parallel,您可以进行个人安装,这不需要 root 访问权限。这样做可以在 10 秒内完成:

      (wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
      

      有关其他安装选项,请参阅http://git.savannah.gnu.org/cgit/parallel.git/tree/README

      了解详情

      查看更多示例:http://www.gnu.org/software/parallel/man.html

      观看介绍视频:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

      浏览教程:http://www.gnu.org/software/parallel/parallel_tutorial.html

      注册电子邮件列表以获得支持:https://lists.gnu.org/mailman/listinfo/parallel

      【讨论】:

        猜你喜欢
        • 2019-02-15
        • 2018-10-05
        • 2021-05-27
        • 2011-07-19
        • 1970-01-01
        • 2022-08-21
        • 2022-01-13
        • 2015-01-20
        • 1970-01-01
        相关资源
        最近更新 更多