如何将220个目录下的*.fq.gz文件迁移至单一目录?
用Shell批量迁移*.fq.gz文件到单一目录
没问题,这个需求用Shell循环/命令处理简直是标配,我给你两个实用的方案,你可以根据自己的场景选择:
方案一:用find命令一键搞定(最简洁)
这种方法不需要手动遍历目录,find会帮你自动递归找到所有符合条件的文件,特别适合子目录结构复杂的情况:
# 第一步:先创建目标目录(如果还没存在的话,-p参数会自动创建多级目录) mkdir -p /path/to/your/target_folder # 第二步:查找所有*.fq.gz文件并移动到目标目录 find /path/to/your/source_parent_folder -type f -name "*.fq.gz" -exec mv {} /path/to/your/target_folder \;
命令解释:
/path/to/your/source_parent_folder:替换成包含那220个目录的父目录路径-type f:确保我们只找文件,不会误操作目录-name "*.fq.gz":精准匹配后缀为.fq.gz的文件-exec mv {} ...:对每个找到的文件执行mv命令,{}代表当前找到的文件路径
方案二:用for循环手动遍历目录(更直观)
如果你明确知道所有220个目录都在同一个父目录下,用for循环遍历每个子目录再移动文件,逻辑更清晰:
# 先创建目标目录 mkdir -p /path/to/your/target_folder # 遍历父目录下的所有子目录 for sub_dir in /path/to/your/source_parent_folder/*/; do # 移动当前子目录下的所有*.fq.gz文件到目标目录 mv "$sub_dir"*.fq.gz /path/to/your/target_folder/ done
注意点:
- 这里的
*后面加了/,确保只遍历目录,不会匹配父目录下的文件 - 用
"$sub_dir"加引号是为了防止目录名包含空格、特殊字符时出错,这是Shell脚本的好习惯
额外提示:
- 先测试再执行:如果你担心误操作,可以先把
mv换成ls,比如ls "$sub_dir"*.fq.gz,看看输出的文件是不是你要迁移的,确认无误后再改回mv - 避免文件覆盖:如果不同目录下有重名的
.fq.gz文件,默认mv会直接覆盖目标目录里的同名文件。想要避免的话,可以用mv -n(不覆盖已存在的文件)或者mv -b(给原文件加备份后缀,比如.bak),例如:mv -n "$sub_dir"*.fq.gz /path/to/your/target_folder/
内容的提问来源于stack exchange,提问作者Chetankumar Bhagavantgoudra
相关产品推荐
相关产品推荐

