같은 디렉터리에 있는 다른 파일을 기반으로 수백 개의 파일 이름을 바꾸려고 합니다. 스크립트를 찾았고 이를 수정한 후 다음과 같은 결과를 얻었습니다.
while read file; do echo mv "\"${file%/*}/Trailer.mov\"" "\"${file%.*}-Trailer.mov\""; done < <(find . -type f ! -name "Trailer.mov" -name "*.mkv")
다음과 같이 mv 명령을 출력합니다.
mv "./dir1/Trailer.mov" "./dir1/filename-Trailer.mov"
수동으로 실행하면 mv 명령이 파일이 있는 경우 파일 이름을 올바르게 바꿉니다. 에코 없이 스크립트를 실행하면 다음과 같은 오류가 발생합니다.
mv: cannot stat ‘"./dir1/Trailer.mov"’: No such file or directory
이 오류는 파일 존재 여부에 관계없이 모든 프로젝트에서 발생합니다. 왜 이런 일이 발생합니까? 나는 루트로 실행 중입니다.
답변1
내부 따옴표를 제거하거나 를 사용해야 합니다 eval
.
문제는 "
이제 s가 파일 이름의 일부로 간주된다는 것입니다. 즉, 존재하지 않는 잘못된 파일 이름에 액세스하려고 한다는 것입니다.