Unix сравнить списки имен файлов - PullRequest
0 голосов
/ 20 июня 2019

Я полагаю, что на подобные вопросы уже давались ответы на SO. Я не могу найти ничего подходящего для моей конкретной ситуации, хотя я уверен, что многие другие столкнулись с этим сценарием.

В сеансе FTP в Red Hat я создал список имен файлов, которые в настоящее время находятся на сервере. Список содержит имена файлов и только имена файлов. Назовите этот файл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, но я просто не могу взломать код. Я ожидаю, что есть много способов решить эту задачу. Есть предложения или рабочие ссылки?

Моя проблемная область на самом деле не в самом цикле, а скорее в сравнении содержимого двух файлов.

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

comm -1 -2 file1 file2 возвращает только строки, которые идентичны в обоих файлах.Это может быть использовано как основание для файла командных команд для sftp.

Из комментариев к вопросу кажется, что окончания строк для этих двух файлов различны.Это может быть исправлено различными способами, простейшим из которых может быть tr.comm понимает - как имя файла, означающее «читать из стандартного ввода».

Например:

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

Если файл1 или файл2 не отсортированы, это необходимо исправить для comm для правильной работы.С bash это может быть:

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

С оболочками, которые не понимают синтаксис <( ... ), временные файлы могут использоваться явно.

0 голосов
/ 20 июня 2019

Спасибо за совет @jhnc.

После более глубокого рассмотрения и разговора я понял, что мне даже не нужно проводить это сравнение.После того, как я скачал файлы, мне просто нужно составить список успешных загрузок.Затем я могу пойти и удалить с сервера на основе списка успешных загрузок.

Однако мне все еще интересно узнать, как сравнить с ситуацией окончания строки '\r \n' против '\n'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...