如果我有数千个名为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 find
和man 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 个副本