2017-09-26 30 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'の最初の引数として新しいファイル名を使用しようとしていますが、それは2番目のものでなければなりません...?また、スペースでファイル名を引用する必要があります。 –

+1

ここで質問をする前に、http://shellcheck.net/でコードを実行することをお勧めします。 –

答えて

2

ソリューション

スワップ$jay$jay2。あなたは、スペースを持っているので

mv sourceFile destinationFile 

、引用することを忘れないでください:

mv "$jay" "$jay2" 

代替

をした場合mvコマンドは、ソースとデスティネーションとしての第2の引数として最初の引数を使用していますrenameがインストールされている場合は、スクリプトを次のコマンドで置き換えることができます。

rename 's/ //g' * 

s/ //gは、空の文字列(//)をグローバルに(g)に置き換えて(s)スペース(/ /)を意味します。
ワイルドカード*は、名前を変更するファイル、つまり作業ディレクトリ内のすべてのファイルを指定します。

+0

非 'rename'の場合、[パラメータ拡張](http://wiki.bash-hackers.org/syntax/pe)ではなく' sed'を使ってOPを残すことは残念です。 'mv" $ jay "" $ {jay // [[:space:]] /} "'のほうが、ファイルごとに 'sed'の別のコピーを走らせるほうがはるかに効率的です。 –

+0

@ソコウィー - 感謝の男 - レイアップ! – capser

関連する問題