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.