Je veux répertorier tous les fichiers que j'ai modifiés cette année et les sauvegarder. Est-ce que quelqu'un sait s'il existe une commande pour les lister ? Merci d'avance.
Réponses
Trop de publicités?Si vous voulez trouver des fichiers, la commande find
est un outil puissant. Vous pouvez parcourir un répertoire et afficher les chemins de tous les fichiers qui correspondent à certains tests :
# trouver tous les fichiers dans /some/directory dont le nom commence par 'project_b'
find /some/directory -iname 'project_b*'
# trouver tous les fichiers dans /some/directory qui sont possédés par l'utilisateur 'joe'
find /some/directory -user joe
# trouver tous les fichiers dans /some/directory dont le nom commence par 'project_b'
# mais qui ne sont *pas* possédés par l'utilisateur 'joe'
find /some/directory -iname 'project_b*' -and -not -user joe
Pour obtenir la date de la dernière modification d'un fichier (ou plus précisément, la dernière modification du contenu d'un fichier), vous pouvez vérifier le timestamp mtime. find
a un test pour mtime :
# trouver tous les fichiers dont le mtime remonte à moins de 365 jours
find /some/directory -mtime -365
Jusqu'à présent, cela vous donne une liste de tous les fichiers que vous souhaitez sauvegarder. Maintenant, pour la sauvegarde elle-même. find
propose une option appelée -exec
qui applique une commande à chaque fichier trouvé :
find /some/directory -iname '*.txt' -exec cp {} /somewhere/else \;
Si la commande find
trouve test.txt
, other.txt
et something.txt
, la partie -exec
exécuterait :
cp test.txt /somewhere/else
cp other.txt /somwhere/else
cp something.txt /somewhere/else
Comme vous pouvez probablement le voir, le {}
est remplacé par le fichier en question.
ÉDIT : Vous aurez sûrement besoin de trouver une meilleure solution que simplement cp
pour la sauvegarde elle-même, car cp
se contenterait de copier chaque fichier dans /somewhere/else
sans conserver la structure des répertoires.
En général, un programme de sauvegarde dédié pourrait être un meilleur choix.
En supposant que vous souhaitiez limiter la date à l'année en cours, vous pourriez utiliser -newermt
avec la date.
Cela recherchera dans le répertoire actuel tous les fichiers après le 1er novembre 2016 et les copiera dans /cible tout en maintenant la structure des répertoires.
find . -newermt "2016-11-01 00:00:00" -exec cp --parents {} /cible \;
Le --parents
ajouté à la commande cp vous permet de copier les fichiers en conservant les dossiers dans lesquels ils se trouvent.
Par exemple...
ubuntu@ubuntu-xenial:~$ ls
percona-release_0.1-4.xenial_all.deb t t2 testdir testfile2.vm testfile.vm
ubuntu@ubuntu-xenial:~$ cp --parents t/output.txt testdir/
ubuntu@ubuntu-xenial:~$ ls testdir/
directory2 t
Lorsque j'ai copié t/output.txt
dans testdir/
, cela a créé le dossier t
à l'intérieur de testdir/
puis a copié le fichier.
Pour répertorier tous les fichiers modifiés cette année ainsi que ses détails:
find / -mtime -365 -ls
Cela affichera tout ce qui date des 365 derniers jours.
Pour afficher uniquement les fichiers réguliers, ajoutez -type f
à la commande ci-dessus.
Pour obtenir une liste de tous les fichiers modifiés (avec le chemin complet):
find / -mtime -365
Vous pouvez sauvegarder ces fichiers n'importe où en utilisant cp
ou scp
, etc.
Ajoutez -printf "%f\n"
à la fin de la commande pour n'afficher que les noms de fichiers.
J'utilise quelques alias
alias last-24-hours='sudo find * -ctime -1 -type f'
alias last-week='sudo find * -ctime -7 -type f'
et vous pouvez créer un alias
alias last-year='sudo find * -ctime -365 -type f'
mais cela produira probablement une liste très longue.
-o-
Si vous souhaitez une vue graphique, vous pouvez utiliser baobab, pour voir où il y a beaucoup de données (et où vous pourriez faire du 'nettoyage' avant la sauvegarde).
-o-
Une alternative est d'utiliser un outil qui peut faire une sauvegarde incrémentielle, par exemple rsync. Il trouvera automatiquement ce qui doit être ajouté ou remplacé dans la sauvegarde.