从文本列表中复制文件

时间:2015-03-11 13:37:51

标签: linux perl unix

我有一个文本格式的样本名称列表,例如

Sample1
Sample2
etc....

我尝试使用下面的一个内容

查找并复制具有这些名称和特定扩展名的文件
 find ./ | egrep fq.gz | fgrep -f list.txt | perl -ne 'chomp; system "cp $_ /data/copy_of_files/"'

不会抛出任何错误,但不会复制任何错误。

此行有效,直到我将输出传递给perl(正确的文件列表从fgrep打印到termial)所以我认为我的问题是perl部分......

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

建议:

  1. 不要在这里使用Perl,而是创建一个只吐出的管道 退出cp命令。只要你对自己的所作所为感到满意 看,附加| sh -x
  2. 绝对确保您的文件名都不包含空格或shell特有的其他字符。如果有人这样做,但只有一点(例如只有空格),你可以在cp命令中适当引用,但如果文件名中有任何可能,则需要采用不同的方法,我可能会写使用File::Find::Rule在Perl中完成整个事情。

答案 1 :(得分:1)

您的原始命令和此命令都适用于我:

find . -name '*.gz' | fgrep -f list.txt | \
   perl -ne 'chomp; system("cp $_ <DIR>");'

您是否确认您的用户或群组具有/data/copy_of_files的写入权限?