Синхронізація текстових файлів - простий скрипт на Perl
Сталося так, що мені стало дуже потрібно синхронізувати обмежений набір файлів між флешкою і комп'ютером. При цьому руками копіювати туди-сюди, згадуючи, який файл редагував останнім - утомливо, а "монстри" синхронізації зайві зважаючи примітивності завдання, адже рекурсивна синхронізація директорій та інші навороти мені ні до чого.
Вирішив накидати найпростіший скрипт на Perl (оскільки перл є у мене і вдома, і на роботі, на відміну від баша наприклад), який би проходив за вказаними мною файлів і синхронізував їх спираючись на дату останньої зміни, іншими словами - свіжіші файли будуть замінювати застарілі.
Сказано - зроблено. Скрипт порівнює пари файлів, перерахованих в хеше в тілі самого скрипта і при необхідності робить синхронізацію. Текст скрипта наведено нижче, може стане в нагоді кому-то крім мене:
#! / Usr / bin / perl #========================================= ======== # DESCRIPTION: Примітивний скрипт для попарной синхронізації зазначених списком # ТЕКСТОВИХ файлів. Синхронізація проводиться на підставі часу # останньої зміни файлу. # # USAGE: вручну внести в список% files пари файлів, між якими повинна # виконуватися синхронізація і запустити скрипт. # # AUTHOR: dimio # URL: http://www.dimio.org # VERSION: 0.1 # CREATED: 2010-07-08 #==================== ============================= require 5.8.8; use warnings; use strict; use encoding 'utf8', STDOUT => ' utf8 '; our $ VERSION = '0 .1'; # Пари файлів для синхронізації вказувати в списку нижче #! правильність введення імен як і саме існування файлів не перевіряються! my% files = ('/ cygdrive/e/tst1/doc_accounting.odb' => './tst2/database.odb', '/ cygdrive/e/tst1/table.ods' => './tst2/file_for_test. ods ', # і так далі до переможного); # Процес пішов ... foreach my $ file (keys% files) {if ((stat ($ file)) [9]> (stat ($ files {$ file})) [9]) {# якщо перший файл змінено пізніше другого - оновити другий open (FROM, '<', $ file) or die "Can't open $ file \ n"; my @ tmp = <FROM>; close (FROM); open (TO, '>', $ files {$ file} ) or die "Can't open $ files {$ file} \ n"; print TO @ tmp; close (TO); print '->'. $ files {$ file}. ' is updated from '. $ file, "\ n";} elsif ((stat ($ file)) [9] <(stat ($ files {$ file})) [9]) {# якщо другий пізніше першого - оновити перший open (FROM, '<', $ files {$ file}) or die "Can't open $ files {$ file} \ n"; my @ tmp = <FROM>; close (FROM); open (TO, '>', $ file) or die "Can't open $ file \ n"; print TO @ tmp; close (TO); print '<-'. $ file. ' is updated from ', $ files {$ file}, "\ n";} else {print' = updating not required ', "\ n";} # інакше оновлення не потрібно # втім у звичайних умовах під Windows час зміни завжди розрізняється на мілісекунди} exit 0;
PS До речі, в черговий раз порадів тому, що користуюся Linux - за пару хвилин зробив для скрипта ярлик з іконкою для панелі Гнома.
Також вихідний текст скрипта доступний, як і завжди, в розділі " Софт ".
Ще на схожі теми:
Рубрики: Linux , Кодинг |
Мітки: perl , життєве , програмінг , скрипт |
Коментарів немає 

Останні коментарі