GNU/Linux >> Znalost Linux >  >> Linux

Jaký je v Linuxu rychlejší způsob než `find` nebo `diff -r`, jak zjistit, zda se něco v adresáři změnilo?

Řešení 1:

GNU tar má volbu --newer-mtime, která vyžaduje argument data, což by bylo pravděpodobně naposledy, kdy jste zálohovali. V závislosti na tom, kolik práce jste chtěli obnovit souborový systém, to může být buď poslední úplná záloha, v takovém případě budete muset obnovit úplný výpis a poslední denně, nebo to můžete udělat od posledního přírůstku, ve kterém V tomto případě budete muset obnovit celý výpis a poté každý výpis.

Tato možnost se spoléhá na časové razítko úpravy v souboru, takže pokud bylo výslovně změněno, je možné, že ho vaše záloha vynechá.

Řešení 2:

Obslužný program incron používá inotify ke spouštění příkazů, když nastanou události souborového systému. Konfigurační soubor je jako crontab, ale místo časů zadáváte cesty a události.

Příkazem může být buď váš zálohovací skript (v takovém případě se zálohování spustí téměř okamžitě po úpravě souborů), nebo jej můžete nechat vytvořit nějaký soubor a nechat záložní skript zkontrolovat existenci tohoto souboru a poté jej odstranit. Pokud soubor existuje, jedna z událostí nastala od posledního spuštění.

Řešení 3:

Vždy můžete najít výstup uživatele do wc a získat celočíselný počet změněných souborů:

find . -ctime 1 | wc -l

I když Davidova odpověď vyžaduje méně změn kódu :)

Řešení 4:

To je trochu divoký nápad, ale můžete si trochu pohrát s md5sum a ls.

Touto myšlenkou je podívat se pouze na md5součet jednoho souboru a že tento soubor je výpis souboru adresáře, který sledujete. A dokud se nic nezmění, součet md5 je stejný. Ale pokud je časové razítko aktualizováno, md5sum se změní a vy víte, že musíte udělat nový tar a poslat ho na váš ftp server.

Mohli bychom začít něčím takovým

ls -lR /path/to/dir/ | md5sum > file_list.txt.md5

Pak byste potřebovali přidat srovnání mezi theold md5 a současným... atd atd

/Johan

Řešení 5:

Nejnovější verze GNU find mají akci "-quit", která způsobí, že find okamžitě zastaví vyhledávání:

— Akce:-konec

Okamžitě ukončete (s návratovou hodnotou nula, pokud nedošlo k žádné chybě). To se liší od „-prune“, protože „-prune“ se vztahuje pouze na obsah prořezaných adresářů, zatímco „-quit“ jednoduše okamžitě zastaví vyhledávání. Žádné podřízené procesy nezůstanou spuštěné, ale nebudou zpracovány žádné další soubory zadané na příkazovém řádku. Například najít /tmp/foo /tmp/bar -print -quit vytiskne pouze „/tmp/foo“. Všechny příkazové řádky, které byly vytvořeny pomocí „-exec ... +“ nebo „-execdir ... +“, jsou vyvolány před ukončením programu.

Můžete použít výraz find k nalezení souborů, které se změnily, a použít -quit k zastavení, jakmile nějaký najdete. To by mělo být rychlejší než najít pokračování ve skenování.

-quit byl přidán do fileutils V4.2.3


Linux
  1. Jak zjistím, který proces má zámek na souboru v Linuxu?

  2. Zkontrolujte, zda je adresář prázdný, pomocí C na Linuxu

  3. Co je dvojitá tečka (..) a jedna tečka (.) v Linuxu?

  1. Jak mohu najít soubor/adresář, který by mohl být kdekoli na příkazovém řádku linuxu?

  2. Jaký je nejrychlejší způsob, jak v Linuxu přesunout milion obrázků z jednoho adresáře do druhého?

  3. Jaký je nejúčinnější způsob, jak přesunout velké množství souborů, které jsou umístěny v jednom adresáři?

  1. Jak se změnilo testování Linuxu a na čem dnes záleží

  2. Najděte soubor a poté cd do tohoto adresáře v Linuxu

  3. Najděte jakýkoli řádek v VI, který má něco jiného než ATCG