如何提取指定目录下所有.fq.gz文件的文件名与大小并写入txt?
解决方法
推荐方案:使用find命令(最可靠)
find命令可递归遍历目录,直接获取每个文件的名称与大小,彻底避免路径匹配问题:
find dir -type f -name "*.fq.gz" -printf "%f %s\n" > data.txt
dir:替换为你的根目录路径(即示例中的dir)-type f:仅查找普通文件,排除目录项-name "*.fq.gz":精准匹配所有后缀为.fq.gz的文件-printf "%f %s\n":格式化输出,%f表示仅取文件名(不含路径),%s表示文件大小(单位:字节),\n实现换行- 最终结果会写入
data.txt,格式完全符合需求
若需要保留文件的完整路径,只需把%f替换为%p:
find dir -type f -name "*.fq.gz" -printf "%p %s\n" > data.txt
备选方案:改进ls命令(适用于文件名无空格场景)
如果坚持使用ls,需处理路径与输出格式问题:
ls -lR dir | grep "\.fq.gz$" | awk '{print $9, $5}' > data.txt
ls -lR dir:递归列出dir下所有文件的详细信息(包含大小字段)grep "\.fq.gz$":筛选出.fq.gz结尾的行awk '{print $9, $5}':提取第9列(文件名)和第5列(文件大小)
⚠️ 注意:若文件名包含空格,awk会将文件名拆分为多列,导致输出错误,因此优先推荐find方案。
原命令报错原因
你之前用ls -R | grep "\.fq.gz"得到的文件名,多为子目录下的相对路径(如subfolder1/file1.fq.gz),但后续操作若在当前目录执行,系统会因找不到这些实际存于子目录的文件,报“文件不存在”错误。
内容的提问来源于stack exchange,提问作者Corrector
相关产品推荐
相关产品推荐

