我有一组脚本,用于通过FTP下载文件,然后从服务器上删除它们。
工作原理如下:
现在$dir可能是"This is a file",这样就没问题了。
我遇到的问题是有特殊字符,例如:
- "This is (a) file" - This is a file & stuff"
这种情况容易出错。
工作原理如下:
for dir in `ls /volume1/auto_downloads/sync-complete`
do
if [ "x$dir" != *"x"* ]
then
echo "DIR: $dir"
echo "Moving out of complete"
# Soft delete from server so they don't get downloaded again
ssh dan@172.19.1.15 mv -v "'/home/dan/Downloads/complete/$dir'" /home/dan/Downloads/downloaded
现在$dir可能是"This is a file",这样就没问题了。
我遇到的问题是有特殊字符,例如:
- "This is (a) file" - This is a file & stuff"
这种情况容易出错。
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `mv -v '/home/dan/Downloads/complete/This is (a) file' /home/dan/Downloads/downloaded'
我不知道如何转义它,使得变量被评估并且命令得到适当的转义。我尝试过各种转义字符、文字引号、普通引号等组合。
rsync --remove-source-files
怎么样?http://serverfault.com/a/363925/69736。简单多了! - Colonel Panicdir
是如何被设置为单个字符串 'This is (a) file' 的。它应该依次设置为 4 个单独的字符串 'This'、'is'、'(a)' 和 'file'。不要解析ls
的输出;切换目录并迭代一个 glob(详见我的答案)。 - chepner[ "x$dir" != *"x"* ]
-- this only works for pattern matching in[[
, not[
- Charles Duffy