web-dev-qa-db-fra.com

Copier les fichiers en fonction de la date de modification sous Linux

Il s’agit peut-être d’une question en double mais je n’ai pas trouvé la solution à ce problème. Je souhaite copier les fichiers des 3 derniers mois d’un répertoire à un autre, mais je n’ai trouvé que la liste des fichiers à l’aide de la commande suivante.

find . -mtime -90 -ls

Je ne sais vraiment pas comment copier les fichiers en utilisant -mtime. Je suis nouveau sur Linux, aidez-moi s'il vous plaît.

16
Kalai

Utilisez l'option -exec pour find:

find . -mtime -90 -exec cp {} targetdir \;

-exec copierait chaque résultat renvoyé par find dans le répertoire spécifié (targetdir dans l'exemple ci-dessus).

28
devnull

On peut également sélectionner la date et l'heure exacte autrement que de revenir à un certain nombre de jours

cp  `find . -type f -newermt '18 sep 2016 20:05:00'` FOLDER

Ci-dessus copie tous les fichiers du répertoire créés après le 18 septembre 2016 à 20:05:00 dans le DOSSIER (3 mois avant aujourd'hui :)

Soyez prudent avec le symbole de la commande find, ce n'est PAS celui-ci: ' C'est ceci, un backtick: ` La sélection de date est avec ceci:'

Si vous avez des fichiers avec des espaces, des sauts de ligne, des tabulations ou des caractères génériques dans leurs noms, vous pouvez utiliser l'une des solutions de Stéphane Chazelas: la première concerne GNU, la deuxième concerne GNU ou certains BSD: 

find . -type f -newermt '18 sep 2016 20:05:00' -exec cp -t FOLDER {} + 
find . -type f -newermt '18 sep 2016 20:05:00' -exec sh -c 'cp "$@" FOLDER' sh {} +
4
FatihSarigol

Utilisez cette commande:

for i in `ls -lrt | grep "jul" | awk '{print $9}' `; do cp $i* /some/folder/; done
4
Mise

Je suppose que je voudrais d'abord stocker la liste des fichiers temporairement et utiliser une boucle.

find . -mtime -90 -ls >/tmp/copy.todo.txt

Vous pouvez lire la liste, si elle n’est pas trop grande, avec

for f in `cat /tmp/copy.todo.txt`;
do echo $f;
done

Remarque: les guillemets autour du chat ... sont des guillemets arrières, souvent situés dans le coin supérieur gauche du clavier

Vous pouvez ensuite remplacer la commande echo par une commande de copie:

for f in `cat /tmp/copy.todo.txt`;
do cp $f /some/directory/
done
2
Paul

Ex: sélectionnez le jour 09/08/2017

ls -l
 -rw-rw-rw-    1    root     system          943   Aug   09   02:59  File

for j in `ls -l |awk '{ if ($7 == "09") print $9}'`
    do
        mv $j $Destination;
    done
1
Ahmed Abdelsamad