我正在尝试运行一个可执行的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行,因为有几台计算机将使用此脚本。 这有点超出我的知识,因为我只知道基本的脚本,但有谁知道为什么会这样?
答案 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("*")
是几种方式之一。