这是代码:
#!/usr/bin/perl -w
$dir="/vol.nas/rpas_qc/mohima/Test/translations";
$dir1="/vol.nas/rpas_qc/mohima/Test/dest";
`find $dir -type f -exec rsync -a {} $dir1\`;
这一行:
find $dir -type f -exec rsync -a {} $dir1\
在Unix中工作正常,但我在perl中遇到错误:
Can't find string terminator "`" anywhere before EOF at test1.pl line 4
我正在尝试将$dir
中的所有文件复制到$dir1
,而不使用子目录。
使用perl,因为脚本会执行很多其他在perl中更容易的东西。
任何帮助表示赞赏。
答案 0 :(得分:3)
\
是Perl中的转义字符。 \
命令末尾的find
正在转发`
。你需要用另一个反斜杠来逃避反斜杠。
`find $dir -type f -exec rsync -a {} $dir1 \\`;
现在,find: missing argument to -exec
会失败。你还需要-exec
部分末尾的分号。
`find $dir -type f -exec rsync -a {} $dir1 \\;`;
答案 1 :(得分:0)
在perl中,尝试更改:
find $dir -type f -exec rsync -a {} $dir1\
要:
find $dir -type f -exec rsync -a {} $dir1\\
答案 2 :(得分:0)
你需要逃避反斜杠和特殊字符。一次用于Perl代码,再用于其他任何语言(在本例中为shell)。
`find $dir -type f -exec rsync -a {} $dir1\`;
在上面的代码中,\
正在转义perl中的最后一个反引号(`)。所以你的子shell执行永远不会终止。要解决这个问题,只需添加另一个反斜杠,它可以避免插入该字符:
`find $dir -type f -exec rsync -a {} $dir1\\`;