我想将每个文件夹(具有唯一名称)中以fastq.gz结尾的特定文件批量复制到新目录,但是它一直给我一个错误,指出找不到该文件。是因为我使用通配符错误?
for f in ./*/split-adapter-quality-trimmed/*.fastq.gz; do
cp *fastq.gz ../../new;
done
答案 0 :(得分:1)
执行for f in ./*/split-adapter-quality-trimmed/*.fastq.gz
将已经在变量*.fastq.gz
中包含以f
结尾的文件名。因此,可以在循环内的cp
(cp $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解释它,以防万一。分号也是如此。)