根据匹配的文件夹复制文件
copy files based on matching folder
我有很多文件夹,例如让我们考虑两个文件夹(folder1、folder2),每个文件夹中都有同名的子文件夹(a1、b1)。
例如:
folder1
a1
b1
folder2
a1
b1
我只想将folder1的子文件夹(a1)的内容复制到folder2的子文件夹(a1),类似地,folder1的子文件夹(b1)到folder2的子文件夹(b1)。
我试过脚本
cp -a ./folder1/. ./folder2/a1
但它没有完成工作...
for path in folder1/*/*; do
echo cp -a "$path" "folder2/${path#folder1/}"
done
- 如果您对“建议”感到满意,请删除
echo
。
- 如果你有一个合理的文件系统,请将
--reflink
添加到cp
。
- 也许您要找的实际上是
rsync
,具体取决于此复制的具体工作方式以及初始状态。 (目标最初是空的吗?如果不是,旧内容应该怎么处理?)
- 如果你想合理匹配以
.
开头的名字(即没有..
和.
),你可以使用例如?(.@([^.]|.?))*
而不是 *
(打开 shopt -s extglob
)。
我有很多文件夹,例如让我们考虑两个文件夹(folder1、folder2),每个文件夹中都有同名的子文件夹(a1、b1)。
例如:
folder1
a1
b1
folder2
a1
b1
我只想将folder1的子文件夹(a1)的内容复制到folder2的子文件夹(a1),类似地,folder1的子文件夹(b1)到folder2的子文件夹(b1)。
我试过脚本
cp -a ./folder1/. ./folder2/a1
但它没有完成工作...
for path in folder1/*/*; do
echo cp -a "$path" "folder2/${path#folder1/}"
done
- 如果您对“建议”感到满意,请删除
echo
。 - 如果你有一个合理的文件系统,请将
--reflink
添加到cp
。 - 也许您要找的实际上是
rsync
,具体取决于此复制的具体工作方式以及初始状态。 (目标最初是空的吗?如果不是,旧内容应该怎么处理?) - 如果你想合理匹配以
.
开头的名字(即没有..
和.
),你可以使用例如?(.@([^.]|.?))*
而不是*
(打开shopt -s extglob
)。