Bash
複製與另一個位置的另一個文件部分匹配的文件
我在這樣的目錄中有一個 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
在 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
該腳本假定您的目錄中沒有例如
fo03
文件fo01
,或者如果您確實有這些文件,則無論如何您都想複製它們。如果不是這種情況,您可能需要調整文件名操作以匹配您的確切情況。您可能需要研究bash 的參數擴展功能以獲取更多資訊。