UNIX 比较文件名列表



我相信类似的问题以前在SO上已经得到了回答。 我找不到任何似乎与我的特定情况相匹配的东西,尽管我相信许多其他人都遇到过这种情况。

在 Red Hat 上的 FTP 会话中,我生成了当前驻留在服务器上的文件名列表。 该列表包含文件名,并且仅包含文件名。 调用此文件1。 也许它包含以下内容:

513569430_EDIP000754535900_MFC_20190618032554.txt
blah.txt
duh.txt

然后我下载了文件并生成了成功下载的文件列表。 此外,此列表仅包含文件名。 调用此文件2。 也许它包含以下内容:

loadFile.dat
513569430_EDIP000754535900_MFC_20190618032554.txt
localoutfile.log

现在我想遍历 file1 中的名称并检查它们是否存在于 file2 中。 如果存在,我将返回FTP服务器并从服务器中删除文件。

我已经查看了循环,通信和测试命令,但我似乎无法破解代码。 我希望有很多方法可以完成这项任务。 有什么建议或工作参考吗?

我的麻烦领域实际上不是循环本身,而是 2 个文件之间的内容比较。

comm -1 -2 file1 file2只返回两个文件中相同的行。这可以用作sftp的批处理命令文件的基础。

从评论到问题,这两个文件的行尾似乎不同。这可以通过多种方式解决,最简单的可能是tr.comm-理解为文件名,意思是"从标准输入读取"。

例如:

tr -d 'r` file1 | comm -1 -2 - file2

如果未对 file1 或 file2 进行排序,则必须更正此问题才能使comm正常运行。使用 bash 时,这可能是:

comm -1 -2 <( sort file1 | tr -d 'r' ) <( sort file2 )

对于不理解<( ... )语法的 shell,可以显式使用临时文件。

感谢您@jhnc的建议。

在对此进行了更深入的考虑和对话之后,我意识到我甚至不需要做这种比较。 下载文件后,我只需要生成成功下载的列表。 然后,我可以根据成功下载的列表从服务器中删除。

但是,我仍然有兴趣知道如何与'r n''n'行结束情况进行比较

相关内容

  • 没有找到相关文章

最新更新