web-dev-qa-db-fra.com

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

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 du "- - mtime 365" cela déplacerait-il les fichiers qui sont plus anciens d'un an vers un nouvel emplacement?

Je vous remercie!

30
mYzk

Tu as presque raison. -mtime 365 sera 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.

Vous pouvez également être intéressé par le -maxdepth 1 flag, 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 \; pour que find sache 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 {} \;
43
Jenny D

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/ \;

Utilisez plutôt l'option -maxdepth 1 pour les fichiers uniquement dans/sourcedirectory

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

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/ \;
0
cuonglm
$ 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/ \;
0
internetuser2008

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 {} +;
0
Pradeep Kanoor