Всем привет.
Вот такая задачка: есть, скажем, 15 серверов, на каждом из которых есть каталог с файлами. Надо сравнить (через ssh, ключ на другие сервера добавлен) файлы в этом каталоге и показать на каком сервере лежит файл, изменения в котором самые свежие (был изменен последним).
Файлы на некоторых серверах могут отсутствовать, скрипт запинаться на должен.
python или bash.
Заранее спасибо за помошь.
найти файл, измененный последним (сравниваем файлы на разных машинах)
Модераторы: /dev/random, Модераторы разделов
- Stauffenberg
- Сообщения: 2042
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
найти файл, измененный последним
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Re: найти файл, измененный последним
Я правильно понимаю, что фактически нужно составить примерно такой список:
сервер файл_с_самым_свежим_таймстампом
?
сервер файл_с_самым_свежим_таймстампом
?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
- Stauffenberg
- Сообщения: 2042
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: найти файл, измененный последним
Да. либо так, либо так: имя_файла --> сервер, на котором самый свежий/новый файл.
Если серверов несколько, то показываем естественно любой IP сервера.
Если серверов несколько, то показываем естественно любой IP сервера.
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Re: найти файл, измененный последним
Код: Выделить всё
for server in server{1..15} ; do ssh $server 'find /path/to/dir -printf "%p %T@ $HOSTNAME \n"' ; done | sort -k1,2 | awk '{if(k!=$1){k=$1;print;}}'
т.к. всё уже отсортировано, то можно обойтись без массива в awk.
если директории имеют разные пути, то нужно резать до одинакового основания. иначе получится каша.
если с переменной HOSTNAME будут проблемы, можно попробовать костыль | sed "s/$/ $server/" после ssh.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
- Stauffenberg
- Сообщения: 2042
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: найти файл, измененный последним
SLEDopit
Большое спасибо! Это то, что нужно.
У меня только вопрос: сравнение по всем серверам идет со списком файлов, которые скрипт нашел на первом сервере из for-списка?
Будует ли добавлять скрипт новые файлы для сравнения, которые есть, скажем, только на 11 и 14 сервере?
Большое спасибо! Это то, что нужно.
У меня только вопрос: сравнение по всем серверам идет со списком файлов, которые скрипт нашел на первом сервере из for-списка?
Будует ли добавлять скрипт новые файлы для сравнения, которые есть, скажем, только на 11 и 14 сервере?
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Re: найти файл, измененный последним
Нет. По сути составляется список всех файлов на всех серверах ( full_path_to_file unix_timestamp server_hostname ), затем сортируется по имени (-k1) и таймстампу (,2) и для каждого уникального имени берётся самый новый запись. Если файл есть только на одном из сервером, то только он и будет присутствовать.Stauffenberg писал(а): ↑06.06.2014 15:52У меня только вопрос: сравнение по всем серверам идет со списком файлов, которые скрипт нашел на первом сервере из for-списка?
Единственное, что я не очень учёл -- файлы могут быть с пробелами в имени. Тогда вся сортировка съедет. Лучше поставить имя файла в самый конец, так надёжнее ( тут правда ещё и awk часть тогда нужно доводить до ума, но я не знаю насколько это вообще актуально ).
Код: Выделить всё
for server in server{1..15} ; do ssh $server 'find /path/to/dir -printf "$HOSTNAME %T@ %p\n"' ; done | sort -k3,2 | awk '{if(k!=$3){k=$3;print;}}'
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
- Stauffenberg
- Сообщения: 2042
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: найти файл, измененный последним
Я уже дополнил скрипт всем, что мне надо. У меня была проблема со списком всех файлов на всех серверах. Похоже. что проблема решена
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)