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

Batch copy files from subdirectories to a new folder?

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

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

执行 for f in ./*/split-adapter-quality-trimmed/*.fastq.gz 将已经在变量 f 中包含以 *.fastq.gz 结尾的文件名。所以直接在循环里面的cp(cp $f destination)中使用。如果在循环里面放一个echo $f,就可以在cp.

之前看到所有的文件并验证
for f in ./*/split-adapter-quality-trimmed/*.fastq.gz; do
    cp $f ../../new;
done

除非你绝对想使用 for-loop,你可以用一个 find 命令来执行:

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

会浏览匹配./*/split-adapter-quality-trimmed的目录,寻找每个以fastq.gz结尾的文件,然后执行需要的cp命令(在[=24=的当前目录下),命令行以分号结尾):

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

(通配符 *fastq.gz 被引号括起来以防止 Bash 对其进行解释,以防万一。分号也是如此。)