![(Bash) 파일 확장자 이름 바꾸기](https://linux55.com/image/118012/(Bash)%20%ED%8C%8C%EC%9D%BC%20%ED%99%95%EC%9E%A5%EC%9E%90%20%EC%9D%B4%EB%A6%84%20%EB%B0%94%EA%BE%B8%EA%B8%B0.png)
Linux 에서 디렉터리에 있는 모든 파일의 이름을 바꾸는 스크립트를 만드는 데 .txt
문제가 있습니다 .
이것이 내가 지금까지 가지고 있는 것입니다.
#!/bin/bash
location_number=$(find /hw1/textarchive | wc -l)
org_path=/hw1/textarchive/!(*txt)
count=0
#for count in $location_number
#do
# rename $org_path .txt
#rename $org_path *.txt
# mv $org_path $org_path.txt
#done
for count in $location_path
do
rename $org_path .pro .txt *.pro <-----was trying to just rename .pro to .txt (no luck)
done
echo done
mv
사용해 보았지만 rename
결과가 없습니다. 실행 하면 mv $org_path $org_path.txt
이와 유사한 오류가 발생합니다 (this file) is not a directory
. 이를 사용 하면 rename
실행할 때 오류가 발생하지 않지만 파일 이름을 .txt
.
답변1
for name in /hw1/textarchive/*.pro; do
newname=${name%.pro}.txt
echo mv "$name" "$newname"
done
또는 더 짧거나,
for name in /hw1/textarchive/*.pro; do
echo mv "$name" "${name%.pro}.txt"
done
echo
(올바른 일을 하고 있다고 확신하면 제거하세요)
.pro
이는 아래의 모든 파일을 반복하여 /hw1/textarchive
이름을 파일로 바꿉니다 .txt
. 교체는 이름 끝의 ${name%.pro}
확장자를 제거 합니다..pro
$name
이름을 바꾸고 싶다면모두문서:
for name in /hw1/textarchive/*; do
echo mv "$name" "${name%.*}.txt"
done
${name%.*}
삭제 됩니다어느이름 끝에 확장자를 추가하세요. 기존 .txt
파일도 처리되지만 이름은 변경되지 않습니다. 확장자가 없는 파일은 새로운 확장자를 갖게 됩니다 .txt
. 이는 파일이 아닌 이름(예: 디렉터리)도 가져오므로 다음 변경 사항에서는 해당 이름을 건너뜁니다.
for name in /hw1/textarchive/*; do
test -f "$name" || continue
echo mv "$name" "${name%.*}.txt"
done
새 이름을 가진 디렉터리 항목이 존재하지 않는지 확인하는 것이 현명할 수 있습니다.
for name in /hw1/textarchive/*; do
test -f "$name" || continue
test -e "${name%.*}.txt" && continue
echo mv "$name" "${name%.*}.txt"
done
또 다른 동등한 형태로:
for name in /hw1/textarchive/*; do
if [ -f "$name" ] && [ ! -e "${name%.*}.txt" ]; then
echo mv "$name" "${name%.*}.txt"
fi
done
이 -f
테스트는 주어진 일반 파일이 존재하는지 테스트합니다. 이 -e
테스트는 주어진 이름이 존재하는지 여부를 테스트합니다.
이 솔루션에는 하나도 필요하지 않습니다 bash
( sh
호환 가능한 셸만 필요함).