首页 > 解决方案 > 打印文件名列表,文本文件中指定的文件名除外

问题描述

我有一个文件夹测试

file1.txt
file2.wav
file3.txt
file4.py

我在test文件夹之外有一个dont_include.txt文件,其中包含内容

file1.txt
file4.py

如何打印测试文件夹中的所有文件名,除了dont_include.txt中列出的文件名

期望的输出:

file2.wav
file3.txt

标签: linuxbashshell

解决方案


您可以使用 grep:

ls test | grep -xvFf dont_include.txt -
  • -f表示模式列表取自文件,在这种情况下是 dont_include.txt
  • -F意味着模式被解释为文字字符串而不是正则表达式,因此 a.txt 不会匹配 abtxt
  • -x只匹配整行,即other_file.txt不会被匹配file.txt
  • -v表示我们要打印不匹配的
  • -(可选)表示我们过滤的列表是标准输入,即ls本例中的输出。

它不适用于名称中带有换行符的文件(但是将它们存储在每行一个文件中已经是错误的)。


推荐阅读