如何将所有文件夹复制到同一目录中?

如何将所有文件夹复制到同一目录中?

如果我有数千个名为a/ b/ c/etc 的文件夹,我该如何多次复制它们及其内容,以便复制的文件夹将被赋予不同的名字,例如a-copy1/ b-copy1/ c-copy1/ ... a-copy12/ b-copy12/ c-copy12/

答案1

该脚本可以实现这一点:

#! /usr/bin/env bash
set -e

for i in /path/to/folder
do
        if [ -d "$i" ]
        then
                for r in $(seq 1 5)
                do
                        cp -r "$i" "$i"\-copy"$r"
                done
        fi
done

信息:

  • for r in $(seq 1 5):这允许您选择要创建的副本数量。
  • if [ -d "$i" ]:检查目标是否是文件夹。
  • cp -r "$i" "$i"\-copy"$r":执行复制。
  • set -e:第一次出现错误时停止。

样本数据:

a b c d e f

示例输出:

a        a-copy3  b        b-copy3  c        c-copy3  d        d-copy3  e-copy2  e-copy5  f-copy2  f-copy5
a-copy1  a-copy4  b-copy1  b-copy4  c-copy1  c-copy4  d-copy1  d-copy4  e         e-copy3  f        f-copy3
a-copy2  a-copy5  b-copy2  b-copy5  c-copy2  c-copy5  d-copy2  d-copy5  e-copy1   e-copy4  f-copy1  f-copy4

答案2

在您的目录中尝试:

ls | grep "pattern" | xargs -i mkdir "{}-copy1"

您将获得所有具有“模式”的文件夹,并在末尾使用 -copy1 重命名。

答案3

如果您有“数千”个文件和/或目录需要处理,find并且xargs是首选工具。阅读man findman xargs

find . -maxdepth 1 -type d -print0 |\
  xargs -0 --no-run-if-empty bash_script

bash_script您的文件(模式 755)在哪里,其中$PATH包含用户编写的脚本来执行复制。

答案4

你可以编写一个简单的 bash 脚本,例如:

    for i in {1..10}; do
        for dir in $(find /src/dir -maxdepth 1 -type d); do
            cp -r $dir /dst/dir/$dir-copy$i;
        done
    done

此代码片段将把位于 /src/dir 的目录复制到 /dst/dir 的 10 个副本

相关内容