내 상위 폴더에는 모두 다음과 같은 구조를 갖고 있고 특정 루프를 생성하려고 하는 폴더가 여러 개 있습니다.
parentfolder/folder01/subfolder/map.png
parentfolder/folder02/subfolder/map.png
parentfolder/folder03/subfolder/map.png
parentfolder/folder04/subfolder/map.png
등...
따라서 각 하위 폴더에는 이름이 지정된 파일이 포함되어 있습니다 map.png
(즉, 모든 하위 폴더의 파일은 이름이 같지만 파일이 다릅니다).
각 파일을 복사하여 전체 상위 폴더에 넣고 싶지만 map.png
동시에 "하위 폴더" 위의 폴더를 기반으로 복사본의 이름을 바꾸고 싶습니다.
예를 들어, 이름을 바꾸는 동안 상위 폴더에 복사하고 싶습니다. map.png
그런 다음 루프를 사용하여 다른 모든 폴더에 대해 동일한 작업을 수행합니다.parentfolder/folder01/subfolder
folder01.png
나는 비슷한 것을 시도했지만 분명히 내가 원하는 것을 수행하기 위해 고군분투하고 있습니다.
for i in parentfolder/*; do
cd $i
cd subfolder
cp map.png ../../"$i".png
cd -
done
저는 아직 초보자이고 이에 대해 매우 새로운 것이므로 도움을 주시면 대단히 감사하겠습니다. 매우 감사합니다.
답변1
아래와 같이 for 루프를 시도해 볼 수 있습니다.
for d in parentfolder/* ; do
cp "$d/subfolder/map.png" "$d.png"
done
현재 디렉토리가 parentfolder
.
답변2
Zsh에는 유틸리티가 함께 제공됩니다.zmv
이는 패턴 기반 파일 이름 바꾸기 및 복사에 유용합니다. .zshrc
아직 입력하지 않았다면 다음 항목에 입력하세요.
autoload -U zmv
alias zcp='zmv -C'
alias zln='zmv -L'
(또는 쉘 세션에서 이 명령을 실행하여 이 세션에서만 활성화할 수 있습니다.)
그런 다음 (에서 parentfolder
):
zcp '(*)/subfolder/map.png' '$1.png'
첫 번째 매개변수는 교체할 패턴입니다. 두 번째 매개변수는 대체 이름입니다. 대신, $1
, $2
등은 패턴에서 해당 브래킷 그룹을 나타냅니다. 다른 가능성과 제한 사항은 설명서를 참조하세요.