我正在尝试将一些文件复制到现有文件夹中。这是架构的一个例子
# origin
/home/user/myfiles/folder1/group1/1.jpg
/home/user/myfiles/folder1/group1/2.jpg
/home/user/myfiles/folder1/group2/1.jpg
/home/user/myfiles/folder1/group2/2.jpg
/home/user/myfiles/folder2/group1/1.jpg
/home/user/myfiles/folder2/group1/2.jpg
/home/user/myfiles/folder2/group2/1.jpg
/home/user/myfiles/folder2/group2/2.jpg
Run Code Online (Sandbox Code Playgroud)
目标文件夹架构已经存在,它只是不存在的原始文件 (jpg)。
我的问题是如何做到这一点?
我想最终得到类似下面的结果,但这不起作用。也许我应该在查询中包含正则表达式以将星号分隔为值并用作来源/目的地?
cp /home/user/myfiles/*/*/*.jpg /home2/user/myfiles/*/*/*.jpg
Run Code Online (Sandbox Code Playgroud)
我最初的打算是在我未回答的问题上使用此复制模式: s3cmd:如何将文件从本地复制到具有现有结构的 S3 存储桶作为可能的解决方案。
通过 GNU cp,您可以使用该--parents
选项,如下所示:
cd /home/user/myfiles ; cp --parents */*/*.jpg /home2/user/myfiles/
Run Code Online (Sandbox Code Playgroud)
你必须cd
首先这样做,因为如果你cp --parents /home/user/myfiles/...
这样做,也会创建那些父母,而你最终会得到/home2/user/myfiles/home/parents/myfiles/
.
如果您需要非 GNUish 答案,传统的 unix 方法将通过管道进行 tar。
cd /home/user/myfiles ; tar cf - */*/*.jpg | ( cd /home2/user/myfiles ; tar xf - )
Run Code Online (Sandbox Code Playgroud)
第二个cd
位于带有第二个 tar 的子 shell 中,因此这就是提取文件的位置。tarball 本身是同时创建、通过管道发送和提取的。v
如果您想要进度报告,请向其中一个 tar添加一个标志。
归档时间: |
|
查看次数: |
5282 次 |
最近记录: |