파일을 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
배포판이 rename
util-linux의 C 명령인 경우(예: Arch Linux):
rename PDF pdf Task1/*PDF
PDF 파일의 끝 부분이 아닌 다른 곳에 "PDF" 문자열이 포함되어 있지 않은 경우 example_PDF_file.PDF
.