Linux
當文件名中有空格時如何使用 s3cmd put?
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 小時內發生更改的所有文件上傳到亞馬遜的儲存桶中,但由於許多文件中都有空格,所以這不起作用。
我不斷收到以下錯誤:
ERROR: Parameter problem: Nothing to upload.
我知道我可以使用同步而不是放置,但我不想這樣做,因為這個文件夾有超過 30K 的文件,這意味著同步必須在伺服器中來回檢查,這需要很長時間並且需要額外的錢。
任何人都知道如何將包含空格的變數傳遞給它以使其工作?
問題是 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