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

如何在Bash中输出目录中无对应文件的ID列表?

解决方案

你可以用for循环结合文件名通配符和if条件判断来实现需求,具体脚本如下:

while IFS= read -r id; do
  if ! compgen -G "${id}_*.txt" > /dev/null; then
    echo "$id"
  fi
done < ids.txt

脚本说明

  • while IFS= read -r id:逐行读取ids.txt中的ID,IFS=避免ID首尾的空格被截断,-r防止转义字符被错误解析。
  • compgen -G "${id}_*.txt":生成所有以${id}_开头、.txt结尾的文件名列表,无匹配文件时返回非零状态码。
  • ! compgen ... > /dev/null:!对状态码取反,当没有匹配文件时执行echo "$id"输出该ID;> /dev/null用于屏蔽匹配到的文件名输出,只保留存在性判断逻辑。

如果偏好更直观的写法,也可以用ls结合重定向实现(注意:文件名含特殊字符时compgen更可靠):

while IFS= read -r id; do
  if ! ls "${id}_"*.txt 1> /dev/null 2>&1; then
    echo "$id"
  fi
done < ids.txt

原脚本问题说明

你之前的for i in $(cat ids.txt); do grep -v $i .; done逻辑错误:grep -v $i .会递归搜索当前目录下所有文件的内容,而非检查文件名前缀,因此完全偏离了需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:14:52