파일 확장자를에서 (으) *.txt
로 변경하고 싶습니다 *.text
. basename
명령을 사용하려고 시도했지만 둘 이상의 파일을 변경하는 데 문제가 있습니다.
내 코드는 다음과 같습니다.
files=`ls -1 *.txt`
for x in $files
do
mv $x "`basename $files .txt`.text"
done
이 오류가 발생합니다.
basename: too many arguments Try basename --help' for more information
답변
직선에서 그렉의 위키 :
# 모든 * .txt의 이름을 * .text로 바꿉니다. * .txt에서 f의 경우; 하다 mv- "$ f" "$ {f % .txt} .text" 끝난
구문 분석하지 않아야ls
하는 이유에 대한 항목도 참조하십시오 .
편집 : basename
구문 을 사용해야하는 경우 다음과 같습니다.
* .txt에서 f의 경우; 하다 mv- "$ f" "$ (기본 이름-"$ f ".txt) .text" 끝난
답변
데비안의 현재 디렉토리에서 모든 파일 확장자를 변경하는 방법은 다음과 같습니다.
rename "s/oldExtension/newExtension/" *.txt
(이것은 Perl rename
명령이 아닙니다 util-linux
. Debian / Ubuntu의 이름 바꾸기 유틸리티가 CentOS와 같은 다른 배포판의 이름 바꾸기 유틸리티와 다른 이유는 무엇입니까?를 참조하십시오 )
답변
rename
fromutil-linux
명령은 간단한 명령으로 “* .txt”와 일치하는 모든 파일에서 “txt”의 모든 발생을 “text”로 바꿉니다.
rename txt text *.txt
답변
rename "s/oldExtension/newExtension/" *.txt
위는 잘 작동하지만 현재 디렉토리로 제한됩니다. 하위 디렉토리에 융통성이있는 아래 명령을 시도하십시오. .txt
디렉토리 구조에있는 모든 파일의 이름을 새 확장자로 바꿉니다 .
find . -name "*.txt" -exec rename 's/.txt$/.newext/' {} \;
답변
for f in *.txt
do
[ -f "$f" ] && mv "$f" "${f%txt}text"
done
답변
여기에 언급 된 답변 s/oldExtension/newExtension/
이 잘못되었습니다. 을 사용 s/txt/text/
하면으로 변환 footxt.txt
됩니다 footext.txt
. 원하는 형식이 아닙니다. 를 사용하더라도 s/.txt/.text/
로 변환 footxt.txt
됩니다 fo.text.txt
.
\.
마침표를 일치시키는 데 사용해야 합니다 ( .
모든 문자와 일치 함). 그리고 $
끝은 줄의 끝과 일치합니다. 이것 만이 확장과 올바르게 일치합니다.
rename 's/\.txt$/.text/' *.txt
rename 's/\.old$/.new/' *.old
답변
@Prince John Wesley의 답변을 바탕으로 현재 디렉토리의 모든 파일 확장자를에서로 변경하는 간단한 bash 스크립트 ext1
가 ext2
있습니다. 또한 이름이 바뀐 파일의 이름을 출력합니다.
#!/bin/bash
for f in *.$1
do
[ -f "$f" ] && mv -v "$f" "${f%$1}$2"
done
사용법 예 (스크립트 이름이이라고 가정 change-ext
) :
change-ext ext1 ext2