다음과 같은 디렉토리에 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
배쉬에서:
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의 매개변수 확장 기능더 많은 정보를 알고 싶습니다.