我有一个像这样的目录中的 jpeg 文件列表(下面只是一个示例,就像结构相同一样,但是这个目录中有很多fo0#
子文件夹,不仅仅是fo01
和fo02
,其中每个子文件夹都有很多.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
我想要做的是循环遍历每个ccc
、ddd
和 上的主目录lll
,以便在循环的每次迭代中,其中一个子文件夹的 jpeg 图像将被复制到父位置。因此在上面的例子中,在循环的第一次迭代中将发生以下情况:
ccc_fo01_c_000.jpeg
并将ccc_fo01_c_001.jpeg
复制(不移动)从ccc/fo01
到ccc
ddd_fo01_d_000.jpeg
并将ddd_fo01_d_001.jpeg
复制(不移动)从ddd/fo01
到ddd
lll_fo01_l_000.jpeg
并将lll_fo01_l_001.jpeg
复制(不移动)从lll/fo01
到lll
并且在第一次迭代结束时,那些复制的 jpeg(在ccc
ddd
lll
)将被删除,ccc
ddd
lll
就好像我没有进行复制一样。
子文件夹上的每次迭代都一样。因此,这意味着在上面的例子中,复制然后删除的过程将发生两次,因为有两个子文件夹fo01
和fo02
。但在我的例子中,有更多的子文件夹。所以如果有人可以建议如何做到这一点。
答案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 循环中执行此操作。