GNU/Linux >> Znalost Linux >  >> Linux

[Vyřešeno]:Proč rsync nezkopíroval skryté soubory/adresáře a proč hvězdička nezahrnuje skryté (tečkové) soubory v Linuxu?

Použil jsem rsync ke zkopírování konkrétního uživatelského adresáře z jednoho úložného zařízení do druhého. Operace byla úspěšně dokončena bez vyvolání jakéhokoli varování/chyby. Ale k mému překvapení byla data ke kopírování přibližně 167 GB a zkopírovaná data měla pouze 1,4 GB! Použil jsem příkaz „du“ k výpočtu velikosti disku zdrojových a cílových složek a podle tohoto návodu – jak opravit nepravidelné statistiky využití disku z du, jsem se ujistil, že „du“ nevykazuje nevypočitatelné výsledky. Níže je snímek vysvětlující scénář.

Scénář: Předpokládejme – starý bod připojení úložiště je „/sata1/home/ramya“ a nový bod připojení úložiště je „/tmp/home/ramya“. Jak již bylo řečeno, použil jsem rsync zkopírujte adresář, jak je znázorněno níže:

usr/bin/rsync -avzlh /sata1/home/ramya/* /tmp/home/ramya/ | tee /tmp/$(date+"%F_%R")-backup.log

Hledejte „hvězdičku“ ve výše uvedeném příkazu (to byl problém a důvod vysvětlím pod okrajem)

zjištění nesrovnalostí příkazů:

du výstup příkazu zdrojového adresáře (/sata1/home/ramya/):

# du -chs /sata1/home/ramya/167G /sata1/home/ramya/167G celkem

du výstup příkazu cílového adresáře (/tmp/home/ramya):

# du -chs /tmp/home/ramya/1,4G /tmp/home/ramya/1,4G celkem

Z výše uvedených snímků můžete vidět, že zdrojový adresář má velikost 167 GB a zkopírovaný adresář má velikost 1,4 GB. Kde jsou tedy zbývající data? Dovolte mi vysvětlit, jak jsem problém vyřešil.

Řešení:

K odladění problému jsem použil du příkaz ke kontrole velikosti každého souboru ve zdrojové a cílové složce, jak je uvedeno níže:Vypsáním seznamu souborů a porovnáním velikosti souboru.

bash-3.2#du -h -x /sata1/home/ramya 15G /sata1/home/ramya/.g448M /sata1/home/ramya/1SVC13G /sata1 /home/ramya/.g8120M /sata1/home/ramya/techg/.techla90G /sata1/home/ramya/.openVAS.tar-gz16G /sata1/home/ramya/.VSL.zip...... 
bash-3.2#du -h -x /tmp/home/ramya 1G /tmp/home/ramya/samplejobtoec48M /tmp/home/ramya/1SVC41M /tmp/home/ramya/M1512K /tmp/home /ramya/techglimpse/openvas.txt134M /tmp/home/ramya/etc/pki264K /tmp/home/ramya/NAMD_CV......

Z výše uvedeného výstupu jsem pochopil, že skryté soubory nebyly zkopírovány a bylo to způsobeno „*" (asterisk) používané v rsync příkaz. Hvězdička rozbalí všechny soubory v aktuální práci adresář kromě souborů, jejichž název začíná tečkou (skryté soubory). Tedy rsync nikdy nepřijímá skryté soubory jako argumenty. Řešením je tedy použít celý název adresáře (místo hvězdičky) jako argument pro rsync příkaz.

rsync -avzlh --ignore-existing /sata1/home/ramya/ /tmp/home/ramya/ | tee /tmp/$(date+"%F_%R")-backup.log

Poznámka:Koncová lomítka na konci obou cest. Jakákoli jiná syntaxe může vést k neočekávaným výsledkům!

Voila! Fungovalo to.


Linux
  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Jak kopírovat soubory v Linuxu a Unixu? 10 cp Příklady příkazů

  3. Jak kopírovat skryté (začínající tečkou) soubory a podadresáře v linuxu?

  1. Kopírování souborů a adresářů v Linuxu

  2. Jak používat příkaz Rsync v linuxu?

  3. Příkaz du neanalyzuje skryté adresáře

  1. Jak kopírovat soubory a adresáře v Linuxu

  2. Jak odstranit adresáře a soubory pomocí Linuxu

  3. Proč se rsync nedaří zkopírovat soubory z /sys v Linuxu?