![我的文件包含许多文件的相对路径,如何仅将 PDF 文件的名称打印到另一个文件中?](https://linux22.com/image/197284/%E6%88%91%E7%9A%84%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E8%AE%B8%E5%A4%9A%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%B8%E5%AF%B9%E8%B7%AF%E5%BE%84%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BB%85%E5%B0%86%20PDF%20%E6%96%87%E4%BB%B6%E7%9A%84%E5%90%8D%E7%A7%B0%E6%89%93%E5%8D%B0%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%EF%BC%9F.png)
因此,我使用 find 命令将满足特定条件的文件的相对路径写入文本文件。现在,我想处理这个文件,因此只打印文件名而不打印路径。因此,必须解析文件中的每一行,如果它包含 PDF 文件的名称,则必须将该名称打印到屏幕上。这个怎么做?这基本上是批处理的一种形式,我还没有找到可以以这种方式用于文件处理的解决方案。
答案1
在这里,我设置了一个相对路径名列表,其中一些包含 pdf,有些则不包含。
$ cat list.txt
../myfiles/some.pdf
../myfiles/another.pdf
../../old.pdf
../../notapdf.txt
../nowhere/pdf with a space.pdf
然后是剧本。
while read -r line; do echo $(basename "$line")
done <<< $(grep -i "\.pdf$" list.txt)
这将在文件列表上执行不区分大小写的 grep,以获取 .pdf、.PDF 甚至 .PdF 文件(假设它们是这样命名的)。 basename 命令将剥离前导路径并留下文件名部分并打印它。这也将处理文件名中的空格。
输出将是:
some.pdf
another.pdf
old.pdf
pdf with a space.pdf
希望有帮助。