从bash中的几个子文件夹中复制具有特定扩展名的粘贴文件



对不起,我太天真了,我真的很纠结。

我有一个像这样的目录

dir 
|--folder1
|     |--- subfolder1
|     |--- ...
|     |--- subfolder100
|
|--folder2 
|--- subfolder1
|--- ...
|--- subfolder100

每个文件夹和子文件夹都包含扩展名为".fq.gz">

的文件。我想列出所有这些文件,然后把它们复制到我的目标文件夹

destination=/path/to/folder/

我已经试过了,但它不适合我,我不知道为什么

ls -R | grep ".fq.gz" | xargs -I {} cp {} "$destination"

错误是目录

中没有这样的文件

解释哪里出了问题的最好方法是查看实际馈送到xargs的内容。

ls -R | grep ".fq.gz"

这将给你一个没有路径的文件列表,所以

file1.fq.gz
file2.fq.gz
...

folder1/subfolder3/file1.fq.gz
folder2/subfolder7/file2.fq.gz
...

这就是为什么它不起作用。

这类操作的工具当然是find,如

find dir -name '*.fq.gz' -exec cp {} "$destination" ; -print

您可以立即使用bashglobstar选项(需要bash版本4.0或更新),而无需使用任何外部命令:

shopt -s globstar
cp **/*.fq.gz "$destination"

最新更新