我在这样的目录中有一个 jpeg 文件列表(下面只是一个示例,结构是相同的,但是有很多fo0#
子文件夹,不仅是fo01
和fo01
,其中每个子文件夹都有很多.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_foo#_c_###
会被手动复制到该ccc
目录中。我想要做的是检查这些手动复制的文件,然后分别将等效的d_foo#_d_###
和复制到和目录lll_foo#_l_###
中。例如,如果我将和复制到该文件夹,那么我的脚本应该复制:ddd
lll
ccc_fo01_c_001.jpeg
ccc_fo02_c_000.jpeg
ccc
ddd_fo01_d_001.jpeg
并ddd_fo02_d_000.jpeg
致ddd
lll_fo01_l_001.jpeg
并l_fo02_l_000.jpeg
致lll
答案1
在bash中:
for x in ccc/*; do
[ -f "$x" ] || continue # skip directories in ccc
y=${x#*_} # strip the ccc_ prefix
cp -p ddd/*/ddd_"${y/_c_/_d_}" ddd/ # copy the corresponding file under ddd
cp -p lll/*/lll_"${y/_c_/_l_}" lll/ # ditto under lll
done
该脚本假设您的目录中没有egfo03
文件fo01
,或者如果您有这些文件,您仍想复制它们。如果不是这种情况,您可能需要调整文件名操作以匹配您的具体情况。
您可能想调查bash的参数扩展特性了解更多信息。