Déplacer des fichiers vers un autre répertoire qui sont antérieurs à une date

28

Je suis à la recherche d'une solution pour déplacer des fichiers qui datent d'un an à partir d'aujourd'hui. Ma partition de journal est saturée, mais je ne peux pas les supprimer. Ils sont nécessaires depuis très longtemps. Quoi qu'il en soit, une solution que j'ai trouvée est:

find /sourcedirectory -mtime 365 -exec mv "{}" /destination/directory/ \;

Est-ce que cela fonctionnerait? Demander à cause de " -mtime 365 " cela déplacerait-il les fichiers qui sont plus anciens d'un an vers un nouvel emplacement?

Merci!

mYzk
la source

Réponses:

40

Tu as presque raison. -mtime 365sera tous les fichiers qui ont exactement 365 jours. Vous voulez ceux qui ont 365 jours ou plus, ce qui signifie ajouter un +avant le numéro comme celui-ci -mtime +365.

Le -maxdepth 1drapeau peut également vous intéresser , ce qui vous empêche de déplacer des éléments dans des sous-répertoires.

Si vous voulez être sûr de ne déplacer que des fichiers, pas des répertoires, ajoutez -type fà la ligne.

À la fin de la ligne, nous ajoutons \;afin de findsavoir que c'est la fin de la commande que nous exécutons.

La ligne devrait donc être:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec mv "{}" /destination/directory/ \;

Pour être sûr, commencez simplement par faire un ls -l au lieu de mv - de cette façon, vous pouvez vérifier à l'avance que vous obtenez exactement les fichiers que vous voulez, avant de le relancer avec mv, comme ceci:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;
Jenny D dit de réintégrer Monica
la source
3
Gardez à l'esprit que mtimec'est le temps de modification (qui ressemble à ce que vous voulez probablement - la plupart du temps). Si ces journaux sont lus / consultés souvent, vous voudrez peut-être les utiliser -atime(dernière heure d'accès).
voretaq7
2
Que fait la barre oblique inversée à la fin de cette ligne?
Ben Liyanage
1
@BenLiyanage La barre oblique inverse est un caractère d'échappement pour le point-virgule qui suit. Le point-virgule signifie la fin de l' execinstruction. Voir la page de manuel pour find.
Jenny D dit Réintégrer Monica
4

Soyez prudent lorsque vous utilisez les solutions ci-dessus, je les ai utilisées et j'ai fini par déplacer tous les fichiers dans tous les sous-dossiers !!!!

Cette commande déplace tous les fichiers du répertoire / source et tous les sous-dossiers du répertoire source:

find /sourcedirectory -mtime +365 -exec mv "{}" /destination/directory/ \;

À la place, utilisez l'option -maxdepth 1 pour uniquement les fichiers dans / sourcedirectory

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;
harleygolfguy
la source
La réponse la mieux notée contient cette note et suggère d'utiliser -type f. Vouliez-vous plutôt dire que les sous-dossiers sont déplacés mais que leur contenu reste dans les sous-dossiers au lieu d'en être déplacé ou ...?
austinian
1
non, je veux dire que «trouver» trouvera tous les fichiers dans / sourcedirectory et tous les sous-dossiers dans ce / sourcedirectory, auxquels je ne pensais pas à l'époque. Le '-maxdepth 1' restreint le 'find' à seulement / sourcedirectory
harleygolfguy
BTW, j'aurais eu cela comme juste un commentaire à la réponse la mieux notée, qui était une bonne réponse, mais je n'ai pas la réputation. :)
harleygolfguy
0

Vous pouvez utiliser cette commande et spécifier que vous ne recherchez que les fichiers, pas le répertoire, et que le fichier a plus d'un an

find /sourcedirectory -type f -mtime +365 -exec mv "{}" /destination/directory/ \;
cuonglm
la source
Pourquoi devrait-il utiliser rm? Votre commande supprime les fichiers journaux et éventuellement le répertoire de destination.
Sven
Ops, mon erreur, je pense que @mYzk veut supprimer ces fichiers. Modifié
cuonglm
0

Vous pouvez utiliser la commande ci-dessous avec atime si vous accédez souvent aux fichiers

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;
Pradeep Kanoor
la source
0
$ find /sourcedirectory/ -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

find: missing argument to `-exec'

Le correct serait de supprimer la barre oblique de fin de /sourcedirectory/

$ find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;
internetuser2008
la source
Lors de mes tests, je n'ai pas pu reproduire l' find: missing argumenterreur, mais je suis d'accord pour dire que supprimer la barre oblique de fin /sourcedirectoryest correct.
guzzijason