설치

설치

우선, 파일 이름 배치에서 첫 번째 공백을 제거하는 코드를 작성해 보세요.

터미널에 입력할 때:

#!/bin/bash

for f in *.jpg; do echo mv "$f" “${f/ /}”; done

나는 얻다:

mv R 1  Pe.jpg “R1 Pe.jpg”
mv R 10 Ma.jpg “R10 Ma.jpg”
mv R 11 An.jpg “R11 An.jpg”

하지만 에코를 제거하면 실제 이름 변경이 발생하지 않고 다음 오류가 발생합니다.

for f in *.jpg; do mv "$f" “${f/ /}”; done
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory

어떤 제안이 있으십니까?

답변1

이는 따옴표가 아닙니다. 너는 .. 하지 않았다 ":

$ uniprops “
U+201C ‹“› \N{LEFT DOUBLE QUOTATION MARK}
    \pP \p{Pi}
    All Any Assigned Punct Is_Punctuation Common Zyyy Pi P General_Punctuation
       InPunctuation Gr_Base Grapheme_Base Graph X_POSIX_Graph GrBase
       Initial_Punctuation Pat_Syn Pattern_Syntax PatSyn Print X_POSIX_Print
       Punctuation QMark Quotation_Mark Unicode X_POSIX_Punct


$ uniprops '"'
U+0022 ‹"› \N{QUOTATION MARK}
    \pP \p{Po}
    All Any ASCII Assigned Basic_Latin Punct Is_Punctuation Common Zyyy Po P
       Gr_Base Grapheme_Base Graph X_POSIX_Graph GrBase Other_Punctuation
       Pat_Syn Pattern_Syntax PatSyn POSIX_Graph POSIX_Print POSIX_Punct Print
       X_POSIX_Print Punctuation QMark Quotation_Mark Unicode X_POSIX_Punct

대상 이름의 따옴표는 적절한 큰따옴표가 아니기 때문에 두 번째 인수는 공백으로 분할되고 첫 번째 명령은 두 파일을 존재하지 않는 디렉터리 로 mv이동하려고 시도합니다 . 이것이 오류의 원인입니다.R 1 Pe.jpg“R1Pe.jpg”

그러니 이것을 시도해 보세요:

for f in *.jpg; do echo mv "$f" "${f/ /}"; done

답변2

예, 이는 인용 문제입니다(다른 답변 참조).

하지만 이 특정 문제의 경우에는 명령을 사용하는 것이 가장 좋습니다 rename. (래리 월(Larry Wall)의 작품)

예를 들어

rename -n -e "s/ //" *.jpg

테스트 후 출력을 확인합니다. 제거하다 -n.

설치

데비안에서는 apt install rename.

답변3

예, 견적이 문제입니다. echo는 명령을 다음과 같이 표시합니다.
mv R 1 Pe.jpg “R1 Pe.jpg”
명령줄에 이 명령을 입력하면 소스의 공백이 인용되거나 이스케이프되지 않기 때문에 실패합니다. 올바른 명령은 다음과 같습니다:
mv "R 1 Pe.jpg" "R1 Pe.jpg"
$f 변수 주위에 quit을 넣으려면 다음을 제안합니다:
mv "\""$f"\"" "${f/ /}"
여기서 "\""는 큰따옴표를 인쇄하는 이스케이프 코드입니다.
예: echo " n " display n. echo " \n "은 n을 이스케이프하고 유사하게 줄바꿈을 표시합니다. , echo " \" "따옴표 안에 따옴표를 이스케이프하는
것은 다음과 같습니다.
mv '"'$f'"' "${f/ /}"

관련 정보