将文件从子目录批量复制到新文件夹?

时间:2019-08-25 18:58:12

标签: bash for-loop cp

我想将每个文件夹(具有唯一名称)中以fastq.gz结尾的特定文件批量复制到新目录,但是它一直给我一个错误,指出找不到该文件。是因为我使用通配符错误?

for f in ./*/split-adapter-quality-trimmed/*.fastq.gz; do
    cp *fastq.gz ../../new;
done

2 个答案:

答案 0 :(得分:1)

执行for f in ./*/split-adapter-quality-trimmed/*.fastq.gz将已经在变量*.fastq.gz中包含以f结尾的文件名。因此,可以在循环内的cpcp $f destination)中直接使用它。如果将echo $f放入循环中,则可以查看所有文件并在cp之前进行验证。

for f in ./*/split-adapter-quality-trimmed/*.fastq.gz; do
    cp $f ../../new;
done

答案 1 :(得分:0)

除非您绝对要使用for-loop,否则可以使用一个find命令执行该操作:

find ./*/split-adapter-quality-trimmed -name "*fastq.gz" -exec cp {} ../../new \;

它将浏览与./*/split-adapter-quality-trimmed匹配的目录,查找以fastq.gz结尾的每个文件,然后执行所需的cp命令(在shell的当前目录中,命令行以半角结尾-冒号):

cp <found-path> ../../new

(通配符*fastq.gz用引号引起来,以防止Bash解释它,以防万一。分号也是如此。)