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

Bash 是否将文件从子目录批量复制到新文件夹?,bash,for-loop,cp,Bash,For Loop,Cp,我想将以fastq.gz结尾的特定文件从具有唯一名称的每个文件夹批量复制到一个新目录,但它总是给我一个错误,说找不到这些文件。是因为我用错了通配符吗 for f in ./*/split-adapter-quality-trimmed/*.fastq.gz; do cp *fastq.gz ../../new; done 在./*/split adapter quality trimmed/*.fastq.gz中执行f将在变量f中包含以*.fastq.gz结尾的文件名。所以直接在循环内

我想将以fastq.gz结尾的特定文件从具有唯一名称的每个文件夹批量复制到一个新目录,但它总是给我一个错误,说找不到这些文件。是因为我用错了通配符吗

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


除非您绝对希望使用for循环,否则可以使用一个find命令执行该操作:

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

cp <found-path> ../../new
通配符术语*fastq.gz被引号包围,以防止Bash解释它,以防万一。分号也是如此。

是的,你应该用$f来代替。如cp$f.//新
find ./*/split-adapter-quality-trimmed -name "*fastq.gz" -exec cp {} ../../new \;
cp <found-path> ../../new