将图像从子文件夹移动到新的子文件夹

将图像从子文件夹移动到新的子文件夹

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. 将父级 ​​1 复制到父级 2
  2. 从 parent2 子目录中删除 dat 文件
  3. 从 parent1 子目录中删除 png 文件
$ cp -r parent1/ parent2
$ rm parent2/*/*.dat
$ rm parent1/*/*.png

相关内容