GNU/Linux >> Znalost Linux >  >> Linux

Kopírovat soubory upravené po určitém datu pomocí přepínačů Cp?

Když spustím příkaz find . -mtime -60 Dostávám seznam souborů upravených za posledních 60 dní.

Takže když spustím find . -mtime -60 -exec cp {} /tmp/1 \; Tyto soubory mohu zkopírovat do nového adresáře pro zpracování

Pokud však chci zachovat časová razítka, nemohu zkopírovat pouze soubory potřebné při spuštění find . -mtime -60 -exec cp -LR --preserve=timestamps {} /tmp/2 \;

Nakonec se stane, že se zkopírují VŠECHNY soubory ve zdrojovém adresáři namísto pouze souborů, které potřebuji.

Je zde nějaké řešení?

Přijatá odpověď:

Zde se děje to, že když použijete -R možnost cp a zadat adresář jako argument, zkopíruje vše v tom adresáři. Navíc to nezachová adresářovou strukturu, protože všechny soubory v nižších adresářích budou zkopírovány přímo do /tmp/2 . To může být to, co chcete (viz odpověď X Tian, ​​jak to udělat tímto způsobem), ale dejte si pozor, pokud mají některé soubory stejný název, jeden přepíše druhý při detaci.

Chcete-li zachovat strukturu adresářů, můžete použít cpio :

find . -mtime -60 -print0 | cpio -0mdp /tmp/2

Pokud je -0 (nebo ekvivalentní) možnost není k dispozici, můžete to udělat, ale pozor, žádný z názvů souborů neobsahuje nový řádek:

find . -mtime -2 | cpio -mdp /tmp/2

cpio by měl také podporovat -L možnost, i když s tím buďte opatrní, protože v některých případech může způsobit nekonečnou smyčku.


Linux
  1. Svázat připojení uživatele SFTP po použití chrootu

  2. Počítání počtu souborů v adresáři pomocí C

  3. Získat mtime konkrétního souboru pomocí Bash?

  1. Jak extrahovat soubory Tar do konkrétního nebo jiného adresáře v Linuxu

  2. Extrahujte konkrétní soubory v archivu tar pomocí zástupného znaku

  3. Hledání a mazání souborů s konkrétním datem

  1. Jak nahrávat nebo stahovat soubory/adresáře pomocí sFTP v Linuxu

  2. Získání všech souborů, které byly upraveny ke konkrétnímu datu?

  3. Kopírovat prvních N souborů do jiného adresáře?