You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下筛选含.spring无.fastq.gz文件的目录及相关查询

解决方案

一、获取仅含.spring文件、不含.fastq.gz文件的目录下的.spring文件路径

你的原命令没有过滤掉那些本身包含.fastq.gz的目录,而是单纯排除了.fastq.gz文件,所以达不到预期效果。可以用shell循环结合条件判断实现需求:

for dir in $(find "$PWD" -name "*.spring" -printf '%h\n' | sort -u); do
    # 检查当前目录下是否存在.fastq.gz文件,无则输出该目录下的.spring文件
    if ! ls "$dir"/*.fastq.gz 1>/dev/null 2>&1; then
        find "$dir" -maxdepth 1 -name "*.spring"
    fi
done

命令说明:

  • find "$PWD" -name "*.spring" -printf '%h\n' | sort -u:找出所有包含.spring文件的目录,%h输出文件所在目录,sort -u去重避免重复处理同一目录
  • ! ls "$dir"/*.fastq.gz 1>/dev/null 2>&1:通过ls检查目录下是否有.fastq.gz,重定向输出和错误到/dev/null避免冗余提示,!表示如果没有找到则执行后续命令
  • find "$dir" -maxdepth 1 -name "*.spring":只输出当前目录下的.spring文件,若需要递归查找子目录里的.spring,去掉-maxdepth 1即可

二、检查目录是否同时包含.fastq.gz和.spring文件

单个目录检查

直接用条件判断即可:

dir="/path/to/your/directory"
if ls "$dir"/*.spring 1>/dev/null 2>&1 && ls "$dir"/*.fastq.gz 1>/dev/null 2>&1; then
    echo "目录 $dir 同时包含两种文件"
else
    echo "目录 $dir 不同时包含两种文件"
fi

批量找出所有同时包含两种文件的目录

用find的-exec参数批量处理:

find "$PWD" -type d -exec sh -c 'ls "$0"/*.spring 1>/dev/null 2>&1 && ls "$0"/*.fastq.gz 1>/dev/null 2>&1' {} \; -print

命令说明:

  • -type d:只查找目录
  • -exec sh -c '...' {} \;:对每个目录执行shell命令,检查是否同时存在两种文件
  • -print:当条件满足时,输出该目录路径

内容的提问来源于stack exchange,提问作者Adarsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:55:16