sh:1:语法错误:"("意外

时间:2015-06-24 23:00:58

标签: perl

我正在尝试运行一个可执行的perl文件,该文件将目录复制到另一个位置,然后删除该新位置中的每个文件,除了那些以.faa和.tsv结尾的文件。这是代码:

#!/usr/bin/perl
use strict;
use warnings;

my $folder = $ARGV[0];

system ("cp -r ~/directoryA/$folder/ ~/directoryB/");
chdir "~/directoryB/$folder";

# Remove everything except for .faa and .tsv files
system ("rm !\(*.faa|*.tsv\)");

无论我是否逃避括号,我都会收到错误:

sh: 1: Syntax error: "(" unexpected

它并没有删除任何文件。 perl文件的位置是〜/ bin,我希望避免更改#!/ usr / bin / perl行,因为有几台计算机将使用此脚本。 这有点超出我的知识,因为我只知道基本的脚本,但有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:2)

如果不使用shell命令,整个程序就会简单得多

我会写这个,它首先只复制想要的文件类型。我假设没有要复制的嵌套目录

use strict;
use warnings;

use File::Copy 'copy';

my ($folder) = @ARGV;

while ( my $file = glob "~/directoryA/$folder/*.{faa,tsv}" ) {
    copy $file, '~/directoryB';
}

答案 1 :(得分:1)

这是在抱怨这条线:

system ("rm !\(*.faa|*.tsv\)");

即使你得到了shell元字符的引用,也是非常迟钝的,我相信它不会删除所有不以.faa.tsv结尾的文件。

Perl完成后一项任务。

unlink grep { -f $_ && !/[.]faa$/ && !/[.]tsv$/ } glob("*")

是几种方式之一。