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

如何在Unix中查找ls输出的文件名是否存在于指定文件中

核对当前目录文件与test.txt列表的方法

我来给你几个实用的命令,帮你快速找出当前目录中存在且出现在test.txt里的文件:

方法1:用grep直接匹配

这是最直观的方式,把当前目录的文件列表传给grep,让它匹配test.txt里的文件名:

ls | grep -Fxf test.txt
  • -F:把test.txt里的内容当作固定字符串(避免正则表达式的干扰)
  • -x:只匹配整行内容(防止部分文件名匹配,比如避免v1.txt误匹配到v11.txt)
  • -f:从test.txt中读取要匹配的模式列表

如果需要忽略文件名的大小写(比如让V1.txt和v1.txt被视为同一个),只需加个-i参数:

ls | grep -Fxfi test.txt

方法2:用comm命令对比有序列表

comm命令专门用来比较两个有序文件的内容,我们可以先把当前目录的文件列表和test.txt都排序后再对比:

comm -12 <(ls | sort) <(sort test.txt)
  • -12:只保留两个列表中都存在的行
  • <():进程替换,把命令输出当作临时文件来处理
  • sort:确保两个列表的顺序一致,让comm能正确对比

同样,如果要忽略大小写,排序时加上-f参数:

comm -12 <(ls | sort -f) <(sort -f test.txt)

小提示:清理test.txt的无效内容

如果test.txt里有空行或者多余的空格,可以先过滤掉再进行匹配,比如:

ls | grep -Fxf <(grep -v '^$' test.txt)

这里grep -v '^$'会去掉test.txt里所有空行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:52:47