web-dev-qa-db-fra.com

Copier les fichiers modifiés après une date spécifique à l'aide de commutateurs CP

Quand j'exécute la commande find . -mtime -60 Je reçois la liste des fichiers modifiés dans les 60 derniers jours.

Alors quand j'exécute find . -mtime -60 -exec cp {} /tmp/1 \; Je peux copier ces fichiers dans un nouveau répertoire de traitement

Toutefois, si je veux conserver les horodatages, je ne suis pas en mesure de copier uniquement les fichiers nécessaires à l'exécution de find . -mtime -60 -exec cp -LR --preserve=timestamps {} /tmp/2 \;

Ce qui finit par se produire, c'est que tous les fichiers du répertoire source sont copiés au lieu de simplement les fichiers dont j'ai besoin.

Toute solution ici?

7
cyberjar09

Ce qui se passe ici, c'est que lorsque vous utilisez le -R Option à cp et fournir un répertoire comme argument, il copie tout dans ce répertoire. De plus, cela ne préservera pas la structure de répertoires car aucun fichier dans des répertoires inférieurs sera copié directement sur /tmp/2. Cela peut être ce que vous voulez (voir la réponse de x Tian pour savoir comment le faire de cette façon), mais attention si des fichiers ont le même nom, on écrasera l'autre à la détection.

Pour préserver la structure de répertoire, vous pouvez utiliser cpio:

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

Si la -0 (ou équivalent) est indisponible, vous pouvez le faire, mais faites attention à aucun de vos noms de fichiers contenant une nouvelle ligne:

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

cpio devrait également soutenir le -L option, bien que vous soyez prudent avec cela comme dans certains cas, cela peut provoquer une boucle infinie.

11
Graeme

Cela préserve les horodatages entre les répertoires et les fichiers:

find . -mtime -60 -type f -exec cp --parents -fuav {} /tmp/2 \;

Testé à l'aide de Centos 7.2.

1
Reado