다른 위치에 있는 다른 파일과 부분적으로 일치하는 파일 복사

다른 위치에 있는 다른 파일과 부분적으로 일치하는 파일 복사

다음과 같은 디렉토리에 jpeg 파일 목록이 있습니다. 아래는 단지 예일 뿐이며 구조는 동일하지만 및 fo0#뿐만 아니라 많은 하위 폴더 가 있습니다 . 각 하위 폴더에는 두 개가 아닌 많은 이미지가 있습니다.fo01fo01.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_###. 예를 들어, 을 해당 폴더에 복사하면 내 스크립트는 다음을 복사해야 합니다.dddlllccc_fo01_c_001.jpegccc_fo02_c_000.jpegccc

  • ddd_fo01_d_001.jpeg그리고ddd_fo02_d_000.jpegddd
  • lll_fo01_l_001.jpeg그리고l_fo02_l_000.jpeglll

답변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의 매개변수 확장 기능더 많은 정보를 알고 싶습니다.

관련 정보