【发布时间】:2019-06-19 21:10:22
【问题描述】:
我相信之前在 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 服务器并从服务器中删除该文件。
我查看了 while 循环以及 comm 和 test 命令,但我似乎无法破解代码。我希望有很多方法可以完成这项任务。有什么建议或工作参考吗?
我的问题不是循环本身,而是两个文件之间的内容比较。
【问题讨论】:
-
sort file1 file1 file2 | uniq -c | sed '/^ *3 /!d;s///;s/[^A-Za-z0-9]/\\&/g;s/^/rm /' > sftp-batch-cmds -
bash:
comm -1 -2 <(sort file1) <(sort file2) | ... -
所有帐户的 comm -12 file1 file2' 应该给我匹配的 1 条记录,但它什么也不返回。
-
可能是行尾(
\r\nvs\nvs\r)差异。尝试使用grep 513569430_EDIP000754535900_MFC_20190618032554 file? | od -c查看 -
正确。 file1 以 \r \n 结尾,而 file2 仅以 \n 结尾。关于处理这个问题的任何热门提示?
标签: unix while-loop compare sftp exists