M
我有一个由几个子文件夹组成的文件夹,每个子文件夹包含一些文本文件和N
图像(*.png
)
这棵树看起来是这样的:
/parent/
/sub-folder1/
/data1.dat
/data2.dat
/image1.png
/image2.png
...
/imageN.png
/sub-folder2/
/data1.dat
/data2.dat
/image1.png
/image2.png
...
/imageN.png
...
/sub-folderM/
/data1.dat
/data2.dat
/image1.png
/image2.png
...
/imageN.png
请注意,每个子文件夹中的所有图像都命名相同(即image1.png, ..., imageN.png
:)
我需要的是移动只有图像移动到新的父文件夹(例如parent2
),同时复制子文件夹结构。移动完成后,新的父文件夹应如下所示:
/parent2/
/sub-folder1/
/image1.png
/image2.png
...
/imageN.png
/sub-folder2/
/image1.png
/image2.png
...
/imageN.png
...
/sub-folderM/
/image1.png
/image2.png
...
/imageN.png
(即:仅图像并尊重相同的子文件夹结构)
原始parent
文件夹应如下所示:
/parent/
/sub-folder1/
/data1.dat
/data2.dat
/sub-folder2/
/data1.dat
/data2.dat
...
/sub-folderM/
/data1.dat
/data2.dat
(即:图片已移出)
我见过一些可以将所有文件移动到新文件夹的脚本示例(Shell 脚本将所有文件从子文件夹移动到父文件夹)或一些只能移动图像(移动图片的脚本)但我还没有找到一个可以这样做尊重子文件夹树。
答案1
您可以尝试使用 rsync:
rsync -av --include="*/" --include='*.png' --exclude='*' parent1 parent2
这将创建目录 parent2 并将所有带有 .png 扩展名的文件及其子目录结构复制到该目录中。
解释
- -v 详细查看复制的内容
- -a 存档模式(复制具有相同所有权、权限等的子目录)
- --include '*/' --include='*.png' 包括 .png 结束文件 第一部分是创建子目录
- --exclude='*' 排除所有其他文件,有关更多信息,请参阅 rsync 手册页
答案2
- 将父级 1 复制到父级 2
- 从 parent2 子目录中删除 dat 文件
- 从 parent1 子目录中删除 png 文件
$ cp -r parent1/ parent2 $ rm parent2/*/*.dat $ rm parent1/*/*.png