2017-09-26 59 views
0

我在窗口頂部使用了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 

通常在bash mv命令在Linux

$ 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表示全局替換(s)空間(/ /)與空字符串(//)(g)。
通配符*指定要重命名的文件,即工作目錄中的所有文件。

+0

使用'sed'而不是[參數擴展](http://wiki.bash-hackers.org/syntax/pe)在非''''''''''情況下使用OP是不幸的。對'mv「$ jay」「$ {jay // [[:space:]] /}」更有效率「,而不是爲每個文件運行一個單獨的'sed'副本。 –

+0

@Socowi - 謝謝你 - 上籃! – capser