현재 디렉토리에 다른 이름을 가진 여러 디렉토리가 있습니다.
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
. 디렉토리 이름에는 , , 등의 기호 문자가 포함될 수 있으므로 이상한 이름도 허용하십시오.sed
vim
grep
$
&
.
답변1
나는 단지 이것을 하고 싶다:
autoload zmv
zmv '(*)/(*)(.*)' '$1$3'