将文件从子目录批量复制到新文件夹?
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 对其进行解释,以防万一。分号也是如此。)
我想将每个文件夹(具有唯一名称)中以 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 对其进行解释,以防万一。分号也是如此。)