Linux - bash script - podmínka IF obsah adresářů je stejný (if dir1==dir2)
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
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í):
- vrací rozdílné soubory
- dir musí končit lomítkem
což by šlo aplikovat do podmínky IF takto (opět použít vrácené řádky):
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.jpg
sent 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