상위 폴더를 기준으로 각 파일의 이름을 바꾸면서 특정 확장자를 가진 파일만 복사합니다.

상위 폴더를 기준으로 각 파일의 이름을 바꾸면서 특정 확장자를 가진 파일만 복사합니다.

여러 디렉토리가 있습니다.

├── folder1.x
│   ├── dsferwe
│   ├── ewrwr342
│   ├── analysis
│   ├── fdsds
│   ├── vcxvcxz
│   ├── 324322
│   ├── export.asc
│   ├── f_random_subfolder.xf
│   │   ├── -.method
│   │   ├── desktop.ini
│   │   ├── lock.file
│   │   └── submethods.xml
│   └── Sync
├── random_folder4.x
│   ├── dsferwe
│   ├── ewrwr342
│   ├── analysis
│   ├── fdsds
│   ├── vcxvcxz
│   ├── 324322
│   ├── export.asc
│   ├── 22random_subfolder.xf
│   │   ├── -.method
│   │   ├── desktop.ini
│   │   ├── lock.file
│   │   └── submethods.xml
│   └── Sync
├── X93430.x
│   ├── dsferwe
│   ├── ewrwr342
│   ├── analysis
│   ├── fdsds
│   ├── vcxvcxz
│   ├── 324322
│   ├── export.asc
│   ├── random_subfolder222.xf
│   │   ├── -.method
│   │   ├── desktop.ini
│   │   ├── lock.file
│   │   └── submethods.xml
│   └── Sync

각 디렉터리에는 하나의 export.asc파일이 포함되어 있습니다.

copy모든 export.asc파일을 새 디렉토리로 이동하면서 상위 디렉토리와 동일한 이름을 갖도록 이름을 바꾸고 싶습니다 . 따라서 결국 위의 예를 기반으로 이 파일을 새 폴더에 넣습니다.

folder1.x.asc
random_folder4.x.asc
X93430.x.asc

이 목표를 어떻게 달성할 수 있나요?

관련된팔로우했지만 아직 성공하지 못한 주제

답변1

당신은 이것을 할 수 있습니다find -exec sh -c ...

find . -name export.asc \
-exec sh -c 'cp "$1" /path/to/new/folder/"$(basename "$(dirname "$1")")".asc' sh {} \;
  • "$(basename "$(dirname "$1")")"파일이 있는 폴더의 이름이 됩니다.

사전 상호 작용 없이 파일을 덮어쓰지 않도록 하려면 에 추가하세요 -i.cp

관련 정보