2017-09-26 19 views
0

Windows 상단에 cygwin을 사용합니다. 공백이있는 파일이 들어있는 windows 파일이 있습니다. 문자 사이의 공백을 없애고 파일의 이름을 바꾸고 싶습니다.파일 이름의 공백을 제거하고 이름 바꾸기 (cywgin)

IMG_4089 - Copy - Copy.JPG 
IMG_4089 - Copy.JPG 
IMG_4092 - Copy - Copy.JPG 
IMG_4092 - Copy (2).JPG 
IMG_4092 - Copy.JPG 
IMG_4093 - Copy - Copy.JPG 
IMG_4093 - Copy (2).JPG 
IMG_4093 - Copy.JPG 

은 일반적으로 떠들썩한 파티에서 MV 명령은

$ cat get_rid_of_spaces.sh 
#!/bin/bash 

IFS=$'\n' ; 

for i in * 
do 
     jay=$i ; 
     jay2=$(echo $i | sed -e "s/ //g") 
     echo $jay2 "--->" $jay 
     mv $jay2 $jay 
     sleep .5 ; 
done 

나는 이러한 오류가 계속하지만 리눅스

에서 작동합니다.

IMG_4089-Copy-Copy.JPG ---> IMG_4089 - Copy - Copy.JPG 
mv: cannot stat 'IMG_4089-Copy-Copy.JPG': No such file or directory 

IMG_4089-Copy.JPG ---> IMG_4089 - Copy.JPG 
mv: cannot stat 'IMG_4089-Copy.JPG': No such file or directory 


IMG_4092-Copy-Copy.JPG ---> IMG_4092 - Copy - Copy.JPG 
mv: cannot stat 'IMG_4092-Copy-Copy.JPG': No such file or directory 

IMG_4092-Copy(2).JPG ---> IMG_4092 - Copy (2).JPG 
mv: cannot stat 'IMG_4092-Copy(2).JPG': No such file or directory 

IMG_4092-Copy.JPG ---> IMG_4092 - Copy.JPG 
mv: cannot stat 'IMG_4092-Copy.JPG': No such file or directory 

IMG_4093-Copy-Copy.JPG ---> IMG_4093 - Copy - Copy.JPG 
mv: cannot stat 'IMG_4093-Copy-Copy.JPG': No such file or directory 

IMG_4093-Copy(2).JPG ---> IMG_4093 - Copy (2).JPG 
mv: cannot stat 'IMG_4093-Copy(2).JPG': No such file or directory 

IMG_4093-Copy.JPG ---> IMG_4093 - Copy.JPG 
mv: cannot stat 'IMG_4093-Copy.JPG': No such file or directory 
+1

변수를 인용하십시오 – 123

+0

새 파일 이름을'mv'에 대한 첫 번째 인수로 사용하려하지만 두 번째 파일 이름이어야합니다 ...? 또한 파일 이름을 공백으로 인용해야합니다. –

+1

여기에 질문하기 전에 http://shellcheck.net/을 통해 코드를 실행하는 습관을 고려하십시오. –

답변

2

솔루션

스왑 $jay$jay2. mv 명령은 소스 및 대상으로 두 번째 인수로 첫 번째 인수를 사용

mv sourceFile destinationFile 

당신이 공간이 있기 때문에, 인용하는 것을 잊지 마십시오

mv "$jay" "$jay2" 

대체

하는 경우를 rename이 설치되어 있으면 다음 명령으로 스크립트를 바꿀 수 있습니다.

rename 's/ //g' * 

s/ //g은 빈 문자열 (//)을 (g)으로 대체하여 (s) 공백 (/ /)을 의미합니다.
와일드 카드 *은 이름을 바꿀 파일, 즉 작업 디렉토리의 모든 파일을 지정합니다.

+0

'rename'이 아닌 경우 [parameter expansion] (http://wiki.bash-hackers.org/syntax/pe) 대신 'sed'를 사용하여 OP를 종료하는 것은 불행합니다. 'mv "$ jay" "$ {jay // [[: space :]] /}"에 훨씬 효율적입니다. 각 파일에 대해'sed'의 복사본을 별도로 실행하는 것보다 훨씬 효율적입니다. –

+0

@Socowi - 고마워요 - 레이 업! – capser