【发布时间】:2013-05-29 01:25:24
【问题描述】:
我有一组脚本,用于通过 FTP 下载文件,然后从服务器中删除它们。
它的工作原理如下:
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 可以是“这是一个文件”,它可以正常工作。
我遇到的问题是特殊字符,例如:
- “这是(一个)文件”
- 这是一个文件和东西"
容易出错:
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-filesserverfault.com/a/363925/69736 怎么样。容易多了! -
目前尚不清楚
dir是如何设置为单个字符串 'This is (a) file. It should be set successively to 4 separate strings 'This', 'is', '(a)', and 'file'. Don't parse the output ofls`;切换目录并遍历一个 glob(有关详细信息,请参阅我的答案)。 -
[ "x$dir" != *"x"* ]-- 这仅适用于[[中的模式匹配,不适用于[