perl中的unix代码

时间:2015-10-03 23:33:23

标签: perl shell unix

这是代码:

#!/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中更容易的东西。 任何帮助表示赞赏。

3 个答案:

答案 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\\`;