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.