(Bash) 파일 확장자 이름 바꾸기

(Bash) 파일 확장자 이름 바꾸기

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호환 가능한 셸만 필요함).

관련 정보