我正在尝试在包含空格,逗号和括号的文件夹上创建for循环。例如:
Italy - Rimini (Feb 09, 2013)
首先,它扫描父文件夹/相册中的子文件夹,如上例所示。然后它对thoses子文件夹中的文件执行curl操作。如果子文件夹不包含空格,逗号或其他符号,则可以正常工作。
for dir in `ls /albums`;
do
for file in /albums/$dir/*
do
curl http://upload.com/up.php -F uploadfile[]=@"$file" > out.txt
php process.php
done
php match.php
done
但如果有这样的符号,似乎卷曲位卡住 - 它找不到$文件(可能是因为$ dir不正确)。
我可以替换子目录中的所有符号或删除它们或将文件夹重命名为001,002,它可以完美地工作。但在诉诸于此之前,我想知道是否可以使用bash技巧解决这个问题,同时保持子文件夹名称不变?
答案 0 :(得分:1)
熟悉shell的分词的概念。然后意识到使用ls
来获取带空格的文件列表会遇到麻烦。相反,使用shell globbing然后引用扩展:
cd /albums
for dir in *; do
for file in /albums/"$dir"/*; do
echo x"$dir"x"$file"x
done
php match.php
done
答案 1 :(得分:0)
对于文件名中的空格问题,您必须将IFS更改为
IFS='
'
告诉shell,只有换行符是文件分隔符。默认情况下,IFS设置为制表符,空格和换行符。
所以只需在循环开始之前放置它,它就可以使用包含空格的文件名。
当然,在你的变量名周围添加引号。