由于文件名中的空格,如何解决,下一个代码无法正常工作?
IFS = '\n'
for name in `ls `
do
number=`echo "$name" | grep -o "[0-9]\{1,2\}"`
if [[ ! -z "$number" ]]; then
mv "$name" "./$number"
fi
done
答案 0 :(得分:28)
不要使用命令替换:使用for name in *
。
答案 1 :(得分:16)
替换
for name in `ls`
使用:
ls | while read name
注意:bash变量范围很糟糕。如果你在循环中更改一个变量,它将不会在循环外生效(在我的版本中它不会,在你的版本中它将会生效)。在这个例子中,没关系。
通知2 :这适用于带空格的文件名,但对于其他一些奇怪但有效的文件名则失败。请参阅下面的Charles Duffy的评论。
答案 2 :(得分:3)
看起来像两个潜在问题:
首先,IFS变量及其赋值不应包含空格。而不是
IFS = '\n'
它应该是IFS=$'\n'
其次,for name in ls
会导致包含spaces
和newlines
的文件名出现问题。如果您只想使用filename
处理spaces
,请执行此类操作
for name in *
我不明白这条线的重要性
number=`echo "$name" | grep -o "[0-9]\{1,2\}"`
这将为您提供filename with spaces
new lines
中的号码。也许这就是你想要的。