파일 확장자만 변경하세요 [중복]

파일 확장자만 변경하세요 [중복]

파일을 one.PDF으로 변경하기 위해 간단한 쉘 스크립트를 작성하고 있습니다 one.pdf. 이 파일을 Task1이라는 폴더에 저장합니다.

내 스크립트는 Task1과 동일한 디렉터리에 있습니다. Shell1.sh실행 하면 Task1이 Task1.pdf가 되지만 one.PDF에 있는 파일은 바뀌지 않습니다. 반대가 필요하지만 내가 시도하는 것은 아무것도 작동하지 않는 것 같습니다. 구문 오류, 바쁜 리소스로 인해 mv가 이동되지 않거나 디렉토리 이름을 바꾸는 것 사이를 계속 번갈아 가며 나타납니다.

누구든지 내가 뭘 잘못하고 있는지 말해 줄 수 있나요?

#!/bin/bash
#shebang for bourne shell execution
echo "Hello this is task 1"
 #Initial prompt used for testing to see if script ran
#/rename .* .pdf *.pdf // doesnt work

#loop to iterate through each file in current directory and rename
for file in Task1;
do
        mv "$file" "${file%.PDF}.pdf"
done

답변1

globbing을 사용하여 파일 이름을 얻으십시오.

for file in Task1/*; do mv ...; done

정확성을 위해 다음으로 끝나는 파일만 사용하세요 .PDF.

for file in Task1/*.PDF; do mv ...; done

보다 정확하게는 디렉터리가 아닌 파일을 다루고 있는지 확인하세요.

for file in Task1/*.PDF; do [ -f "$file" ] && mv ...; done

참고로 매개변수 확장 패턴은 괜찮습니다.

답변2

기본 셸 명령 외에도 대부분의 Linux 배포판에는 rename단일 명령으로 여러 파일의 이름을 바꾸는 작업을 수행할 수 있는 훌륭한 도구가 있습니다.

rename 's/PDF/pdf/' Task1/*

이에 대한 좋은 기사는 다음과 같습니다.이름 바꾸기 - Linux에서 여러 파일의 이름을 바꾸는 명령줄 도구.

답변3

배포판이 renameutil-linux의 C 명령인 경우(예: Arch Linux):

rename PDF pdf Task1/*PDF

PDF 파일의 끝 부분이 아닌 다른 곳에 "PDF" 문자열이 포함되어 있지 않은 경우 example_PDF_file.PDF.

관련 정보