我正在尝试将数据从文件夹(名为Zip)复制到一组新创建的文件夹中。
Zip文件夹内容为:
SO_90_X_L001_R1.fastq.gz
SO_100_X_L001_R1.fastq.gz
SO_101_X_L001_R1.fastq.gz
我创建了以下空文件夹:
SO_90
SO_100
SO_101
如果不提供键盘输入,是否可以使用Perl将这些压缩文件复制到匹配的文件夹?
我尝试了下面的脚本,而且我没有得到正确的输出。
#!usr/bin/perl
use File::Copy "cp";
open(my $F, "a.txt") or die("cant open a.txt\n");
while(<$F>)
{
next unless /\S/;
mkdir $_ ;
}
close($F);
for my $file (<SO_/*.fastq.gz>){
print $_;
if( $file =~ m!SO_/(.*)_X_L001_R1.fastq.gz! ) {
mkdir($_); # comment this line if not necessary
cp($file, "$1/") or warn("Copy '$file, $1' failed\n");
} else {
warn("$file is not ending in '_X_L001_R1.fasta.gz'\n");
}
}
答案 0 :(得分:1)
我正在写一个新的答案,因为我们的问题实际上是不同的。
我们有几个像ZIP/SO_100_X_L001_R1.fastq.gz
这样的文件要复制到
SO_100/...
。
#!/usr/bin/perl
use File::Copy "cp";
for my $file (<ZIP/*.fastq.gz>){
print $_;
if( $file =~ m!ZIP/(.*)_X_L001_R1.fastq.gz! ) {
mkdir($1); # comment this line if not necessary
cp($file, "$1/") or warn("Copy '$file, $1' failed\n");
} else {
warn("$file is not ending in '_X_L001_R1.fasta.gz'\n");
}
}
编辑:我添加了一些“警告”以帮助调试
答案 1 :(得分:0)
perl -nle 'mkdir $_ if /\S/' a.txt
-l
从文件夹名称中删除\n
(否则文件夹名称为SO_100\n
)if /\S/
跳过输入文件中可能的空行(您的问题已更改....)更新:如果您需要更复杂的处理,您可以构建一个脚本,其中可以包含以下内容:
open(my $F, "a.txt") or die("cant open a.txt\n");
while(<$F>){
chomp;
next unless /\S/;
mkdir $_ ;
#... do other things related with this folder...
}
close $F;