如何在目录列表中找到匹配的文件名?

如何在目录列表中找到匹配的文件名?

我的硬盘中有大量 ISO 映像,并且我将其全部内容列在以下格式的文本文件中:

<immage>.iso, <dir structure>/<filename>.<extension>

例子:

OS Backups.iso, ­ubuntu-­12.­04-­desktop-­i386.­iso 
OS Backups.iso, xubuntu-12.04-desktop-i386.iso
OS Backups.iso, background/pictures.jpg
Pictures vacation 2011.iso, documents/cost_estimates.xls
Pictures vacation 2011.iso, italy/img1.jpg
Pictures vacation 2011.iso, italy/img2.jpg

现在我想针对该文本文件发出 grep 命令来查找名称中包含“图片”的文件。预期结果将是(对于上一个示例):

Pictures vacation 2011.iso
OS Backups.iso, background/pictures.jpg

关于如何使用 grep 完成这样的事情,您有什么想法吗?有其他选择吗?谢谢!

答案1

以下是如何使用grep,使用 Perl 正则表达式语法-P,以及仅返回匹配部分转变-o

grep -Poi "(.*pictures.*\.iso.*pictures.*|.*pictures.*\.iso|.*pictures.*)"  | sort | uniq

返回:

OS Backups.iso,背景/图片.jpg
图片假期2011.iso
  • 对于每一行,grep首先检查它是否是.iso名称中带有“图片”的文件,其中还包含名称中带有“图片”的文件,例如:
    图片假期 2011.iso,意大利/图片5.jpg
  • 如果找到,它会打印该行并继续;如果没有找到,它会检查这是否是一个.iso名称中带有“图片”的文件;
  • 如果是,它就只打印 ISO 名称;如果不是,它会检查此行是否包含名称中带有“图片”的文件……

答案2

$ awk -F ", " 'BEGIN { IGNORECASE=1 } $1 ~ /pictures/ { print $1 ; next } $2 ~ /pictures/ { print }' < context.txt | sort | uniq
OS Backups.iso, background/pictures.jpg
Pictures vacation 2011.iso

答案3

#!/usr/bin/env python

import re, sys
a_file = sys.argv[1]
a_string = sys.argv[2]

#from http://www.peterbe.com/plog/uniqifiers-benchmark
def uniquify(seq, idfun=None): 
   # order preserving
   if idfun is None:
       def idfun(x): return x
   seen = {}
   result = []
   for item in seq:
       marker = idfun(item)
       # in old Python versions:
       # if seen.has_key(marker)
       # but in new ones:
       if marker in seen: continue
       seen[marker] = 1
       result.append(item)
   return result

mylist = []

with open(a_file, 'r') as items:
    for line in items.readlines():
        if (re.search(a_string, line, re.IGNORECASE)):
            temp = line.split(',',1)
            if (re.search(a_string, temp[0], re.IGNORECASE)):
                mylist.append(temp[0])
            else:
                mylist.append(line.rstrip())

mylist = uniquify(mylist)
for item in mylist:
    print(item)

运行时产生所需的输出python test.py index.txt pictures

答案4

import fileinput
import sys
lookFor = sys.argv[1]
for line in fileinput.input("textfile.txt"):
    if lookFor in line:
            print line

您可以使用以下命令运行此脚本python scriptName.py WORDTOLOOKFOR ,例如,如果我想检查文本文件中是否包含单词“ubuntu”,并且脚本名为 script.py,我编写以下命令

python script.py ubuntu

确保重命名脚本中的文本文件。

编辑:这只会打印包含它的行,不会将其存储在任何地方,就像 grep 可以做的一样。

相关内容