내가 사용하고 있는 파일 목록이 있습니다.%20이름에 공백을 나타냅니다.
현재 %20에서 공백 ""으로 변경하기 위해 다음을 수행하려고 합니다.
for x in *.txt
do mv $x $(echo $x | sed -e 's/%20/ /')
done
이건 재미가 없어. 다음과 같은 내용이 나옵니다.
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
하지만 일부 이미지를 가져올 때 동일한 작업을 수행했는데 제대로 작동했습니다.
for x in *_MG*.CR2
do mv $x $(echo $x | sed -e 's/_MG/_IMG/')
done
누군가가 그것을 사용하고 있다는 것을 잊어 버렸습니다.. txt다른 하나는.CR2, 내가 여기서 완전히 간과하고 있는 것은 무엇입니까?
저는 업무용 노트북을 사용하고 있으므로 다른 소프트웨어를 설치하기 위해 Homebrew를 추가할 수 없다는 점을 명심하세요. 운영 체제는 Mac OS X입니다.
답변1
모든 유형의 파일에서 rename
공백을 사용하고 바꾸십시오 .%20
$ rename -n 's/%20/ /g' *
File%20with%20in00.yA2 renamed as File with in00.yA2
File%20with%20in01.h9H renamed as File with in01.h9H
File%20with%20in02.CNR renamed as File with in02.CNR
File%20with%20in03.PuP renamed as File with in03.PuP
File%20with%20in04.js8 renamed as File with in04.js8
File%20with%20in05.KdZ renamed as File with in05.KdZ
OS X에서는 Perl 기반의 특수 도구를 사용할 수 있습니다.유틸리티 이름 바꾸기. 널리 사용되는 패키지 관리자를 사용하여 설치할 수 있습니다.스스로 만든:brew install rename
참고: -n
실제 이름 바꾸기를 수행하려면 옵션을 제거하십시오.
답변2
sed를 사용할 필요가 없습니다. 매개변수 확장을 통해 처리할 수 있습니다.
mv -- "$x" "${x//%20/ }"
FWIW, 나는 %20
그 s를 밑줄(또는 다른 것)로 바꿀 것입니다.증오공백이 포함된 파일 이름입니다. 하지만 파일 이름의 공백과 기타 특수 문자를 처리할 수 있는 bash 스크립트를 작성하는 방법을 배우는 것이 좋을 것 같습니다. :)
Izkata가 댓글에서 언급했듯이,매우중요한 것은 참조 매개변수입니다! Bash(및 관련 쉘)의 큰따옴표는 단순한 문자열 구분 기호가 아니라 단어 분리가 발생하지 않도록 하려는 의미이기도 합니다. 따라서 x
공백이 포함된 파일 이름을 포함 하면 $x
두 개의 인수로 처리되지만 "$x"
단일 인수로 처리됩니다. 작은따옴표를 사용하면 매개변수 확장이 비활성화되므로 일반적으로 우리가 원하는 것이 아닌 '$x'
포함된 리터럴 문자열만 생성됩니다 . $x
:)
추신. --
내 명령줄에 누락된 부분을 제공해준 Mr. Chazeras에게 감사드립니다 . --
인수 목록에서 옵션의 끝을 나타냅니다. 이것이 없으면 로 시작하는 파일 이름은 -
옵션으로 해석될 수 있습니다.
답변3
가능한 출력에는 mv
공백이 있으므로 루프에서 명령을 실행하지 않으려면 결과를 큰따옴표로 묶어야 합니다 for
. 예를 들면 다음과 같습니다.
mv abc%20def abc def
mv
논쟁이 너무 많은 곳 . 이들은 당신에게 정보를 제공하는 사람들입니다 usage:
.
당신이 해야 할 일은:
for x in *_MG*.CR2
do
mv -- "$x" "$(printf '%s\n' "$x" | sed 's/_MG/_IMG/')"
done