次のディレクトリにjpegファイルのリストがあります。以下は単なる例であり、構造は同じですが、同様にfo0#
多くのサブフォルダがあります。各サブフォルダには2つではなく、多くの画像があります。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
バッシュから:
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
このスクリプトは、たとえば、ディレクトリにfo03
ファイルがないfo01
場合やファイルがある場合は、まだコピーしたいとします。そうでない場合は、特定の状況に合わせてファイル名の操作を調整する必要があります。
調査したいかもしれませんBashのパラメータ拡張機能より多くの情報を知りたいです。