Ahoj, potřeboval bych do mého bash skriptu, který provádí přesun dat mezi dvěma linux stroji, přidat podmínku, která bude True, když dva adresáře (lokální a vzdálený) budou obsahovat ten samý obsah. Protože když se adresáře sesynchronizují, tak potřebuji data v tom zdrojovém adresáří odstranit a musím mít jistotu, že předtím je ověřeno, že data jsou skutečně do cílového adresáře zkopírována všechna. Díky
ODPOVĚĎ
Dobrý den,
podmínka IF na to, zda je obsah dvou adresářů stejný (if dir1==dir2) může být provedena několika způsoby (neříkám, že jsou dokonalé, ale fungují):
1.) Využití funkce diff a počtu vrácených řádků
if [ `diff -rq dir1/ dir2/ | wc -l` != 0 ]; then echo 'KO - dir1 != dir2' else echo 'OK - dir1 = dir2' fi
2.) Použít dry run na rsync
- vrací rozdílné soubory
- dir musí končit lomítkem
rsync -rvnc dir1/ dir2/
sending incremental file list
code-150x150.jpgsent 2,734 bytes received 20 bytes 5,508.00 bytes/sec
total size is 4,684,691 speedup is 1,701.05 (DRY RUN)
což by šlo aplikovat do podmínky IF takto (opět použít vrácené řádky):
if [ `rsync -rvnc dir1/ dir2/ | wc -l` == 4 ]; then echo 'OK - dir1 = dir2' else echo 'KO - dir1 != dir2' fi
Komentáře (0)
Přidat komentář