我在我的csh脚本中有一个rsync命令,如下所示:
#! /bin/csh -f
set source_dir = "blahDir/blahBlahDir"
set dest_dir = "foo/anotherFoo"
rsync -av --exclude=*.csv ${source_dir} ${dest_dir}
当我运行这个时,我收到以下错误:
rsync: No match.
如果我删除 --exclude
选项它可以工作 . 我在bash中编写了等效脚本,并且按预期工作
#/bin/bash -f
source_dir="blahDir/blahBlahDir"
dest_dir="foo/anotherFoo"
rsync -av --exclude=*.csv ${source_dir} ${dest_dir}
问题是这必须只在csh中完成 . 关于如何让他上班的任何想法?
1 回答
这是因为
csh
正在尝试将--exclude=*.csv
扩展为文件名,抱怨因为它无法找到与该模式匹配的文件 .您可以通过将选项括在引号中来解决此问题:
或者逃避星号:
这是
csh
和bash
使用与文件不匹配的通配符对参数的默认处理方式不同的结果 .csh
会抱怨,而bash
只是不管它 .您可能认为
bash
选择了更好的方法,但不一定如此,如下面的抄本所示,您有一个与参数匹配的文件:你可以看到
bash
shell扩展了参数,而不是按原样将它提供给程序 . 双方各有利弊 .