파일 확장자를 유지하면서 디렉터리의 파일 이름을 해당 디렉터리 이름으로 바꾸려면 어떻게 해야 합니까?

파일 확장자를 유지하면서 디렉터리의 파일 이름을 해당 디렉터리 이름으로 바꾸려면 어떻게 해야 합니까?

현재 디렉토리에 다른 이름을 가진 여러 디렉토리가 있습니다.

Hello World/
Dr. Dre - Still Dre/
Angry Birds/
2018 Grand Prix Race Highlights/

각 디렉터리에는 파일이 있습니다(각 디렉터리에 하나씩).

source.c
song.aac
setup.apk
spanish.mp4

각 파일의 이름을 해당 디렉터리 이름으로 바꾸고 싶지만 확장자는 바뀌면 안 됩니다. 예제 출력 파일:

Hello World.c
Dr. Dre - Still Dre.aac
Angry Birds.apk
2018 Grand Prix Race Highlights.mp4

출력 위치는 중요하지 않습니다.

현재 디렉토리에서 파일 이름을 바꾸는 솔루션을 많이 찾았 for file in *지만 mv "$file" "${file/oldname/newname}"내 파일은 1레벨 깊이의 하위 디렉토리에 있으므로 현재 가지고 있는 파일은 다음과 같습니다.

currdir=$(pwd)
for dir in */
do
  cd ${dir}
  file=$(echo *)
  ext=${file##*.}
  mv "*" "${dir}.${ext}"
  cd ${currdir}
done

저는 zsh를 사용하고 있는데 이 기능을 실행하려고 할 때 zsh: source.c not found해당 라인에 뭔가 문제가 있을 수 있다고 생각합니다 file=$(echo *). 나는 또한 내가 하고 있는 일의 복잡성을 좋아하지 않으므로 더 깔끔한 방법이나 선이 있을 수도 있습니다. mv, , 등 Ubuntu에 기본적으로 설치된 명령 을 사용하고 싶습니다 find. 디렉토리 이름에는 , , 등의 기호 문자가 포함될 수 있으므로 이상한 이름도 허용하십시오.sedvimgrep$&.

답변1

나는 단지 이것을 하고 싶다:

autoload zmv
zmv '(*)/(*)(.*)' '$1$3'

관련 정보