将子目录的内容复制到其父目录中

将子目录的内容复制到其父目录中

我有一个像这样的目录中的 jpeg 文件列表(下面只是一个示例,就像结构相同一样,但是这个目录中有很多fo0#子文件夹,不仅仅是fo01fo02,其中每个子文件夹都有很多.jpeg图像,而不仅仅是两个):

.
`-- main
    |-- ccc
    |   |-- fo01
    |   |   |-- ccc_fo01_c_000.jpeg
    |   |   `-- ccc_fo01_c_001.jpeg
    |   `-- fo02
    |       |-- ccc_fo02_c_000.jpeg
    |       `-- ccc_fo02_c_001.jpeg
    |-- ddd
    |   |-- fo01
    |   |   |-- ddd_fo01_d_000.jpeg
    |   |   `-- ddd_fo01_d_001.jpeg
    |   `-- fo02
    |       |-- ddd_fo02_d_000.jpeg
    |       `-- ddd_fo02_d_001.jpeg
    `-- lll
        |-- fo01
        |   |-- lll_fo01_l_000.jpeg
        |   `-- lll_fo01_l_001.jpeg
        `-- fo02
            |-- lll_fo02_l_000.jpeg
            `-- lll_fo02_l_001.jpeg

我想要做的是循环遍历每个cccddd和 上的主目录lll,以便在循环的每次迭代中,其中一个子文件夹的 jpeg 图像将被复制到父位置。因此在上面的例子中,在循环的第一次迭代中将发生以下情况:

  • ccc_fo01_c_000.jpeg并将ccc_fo01_c_001.jpeg复制(不移动)从ccc/fo01ccc
  • ddd_fo01_d_000.jpeg并将ddd_fo01_d_001.jpeg复制(不移动)从ddd/fo01ddd
  • lll_fo01_l_000.jpeg并将lll_fo01_l_001.jpeg复制(不移动)从lll/fo01lll

并且在第一次迭代结束时,那些复制的 jpeg(在ccc ddd lll)将被删除,ccc ddd lll就好像我没有进行复制一样。

子文件夹上的每次迭代都一样。因此,这意味着在上面的例子中,复制然后删除的过程将发生两次,因为有两个子文件夹fo01fo02。但在我的例子中,有更多的子文件夹。所以如果有人可以建议如何做到这一点。

答案1

以下是有关如何操作的建议:

首先,您遍历文件夹,在每个文件夹中搜索并找到文件并将其复制到其父文件夹中。

#!/bin/bash

#Iterate over the folders    
for folder in main/*
do
    #Copy the files into the folder
    find $folder -name "*.jpeg" -type f -exec cp {} $folder \; -print
done

#After its done: delete the originals
find main -mindepth 3 -name "*.jpeg" -type f -delete

我刚刚编写了一个快速查找功能来删除最后的文件。您也可以在 for 循环中执行此操作。

相关内容