for file in $(find . -type f -mmin -240) do filename=$(echo "$file" | cut -d'.' --complement -s -f1) s3cmd put $file s3://${bucketname}/$filename done
我正在尝试执行上述操作,以便将最近4小时内发生更改的所有file upload到亚马逊的存储桶中,但是由于许多文件中都有空格,因此无法正常工作。
我不断收到以下错误:
ERROR: Parameter problem: Nothing to upload.
我知道我可以使用同步而不是放,但我不想这样做,因为这个文件夹有超过30K的文件,这将意味着同步必须在服务器中检查,这将需要时间和成本额外的钱。
任何人都知道如何将包含空格的variables传递给它来使其工作?
问题是bash for循环使用$ IFS作为字段分隔符,默认为空格。 因此,由空格分隔的文件名的每个部分将作为循环中的不同迭代来进行。
IFS可以更改为匹配换行而不是空格,并允许正确处理查找输出。
例如:
# save and set IFS OIFS=$IFS IFS=$'\n' # do your processing for file in $(find . -type f); do echo '>>'${file}"<<"; done # restore IFS IFS=$OIFS