消除文件名中的空格并重命名(cywgin)
Eliminate spaces in filename and rename (cywgin)
我在 windows 之上使用 cygwin。
我有一个 windows 文件,其中包含带空格的文件。我想去掉字符之间的空格并重命名文件。
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
解决方案
交换 $jay
和 $jay2
。 mv
命令使用第一个参数作为源,第二个参数作为目标:
mv sourceFile destinationFile
别忘了引用,因为你有 spaces:
mv "$jay" "$jay2"
备选
如果您安装了 rename
,您可以使用以下命令替换您的脚本:
rename 's/ //g' *
s/ //g
表示全局用空字符串(//
)替换(s
)space(/ /
)(g
).
通配符 *
指定要重命名的文件,即工作目录中的所有文件。
我在 windows 之上使用 cygwin。 我有一个 windows 文件,其中包含带空格的文件。我想去掉字符之间的空格并重命名文件。
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
解决方案
交换 $jay
和 $jay2
。 mv
命令使用第一个参数作为源,第二个参数作为目标:
mv sourceFile destinationFile
别忘了引用,因为你有 spaces:
mv "$jay" "$jay2"
备选
如果您安装了 rename
,您可以使用以下命令替换您的脚本:
rename 's/ //g' *
s/ //g
表示全局用空字符串(//
)替换(s
)space(/ /
)(g
).
通配符 *
指定要重命名的文件,即工作目录中的所有文件。