Je travaille actuellement sur un script qui me permet de déplacer tout fichier de plus de 5 jours dans un dossier d’archive avec le même chemin, à l’exception du dossier racine qui change. Donc, quelque chose comme: root/subdir1/subdir2/file
à rootarchive/subdir1/subdir2/file
. Cela devrait fonctionner de manière récursive.
J'ai déjà essayé de créer un foreach pour tous les fichiers du dossier "racine":
#!/bin/bash
find . -type f -name '*.*' -print0 | while IFS= read -r -d '' file; do
mv $file ../rootarchive/"$file"
done
Mais cela ne fonctionnait pas correctement car la commande mv ne parvenait pas à trouver la destination spécifiée ../rootarchive/"$file"
. Quelqu'un parmi vous a-t-il une idée de la façon dont je pourrais résoudre ce problème?
Vous devez créer l'arborescence de répertoires à partir de subdir1/subdir2/
- mv
ne le fera pas pour vous. Vous pourriez faire, par exemple:
find . -type f -mtime +5 -print0 | while IFS= read -r -d '' file; do
dir="${file%/*}"
mkdir -p ../rootarchive/"$dir"
mv "$file" ../rootarchive/"$file"
done
Vous pourriez rsync
. Il peut recréer la structure de répertoires et effacer les fichiers copiés:
find . -type f -mtime +5 -print0 |
rsync -0avP --remove-source-files --files-from=- ./ ../rootarchive
Pour rsync
:
-0
indique que les listes de fichiers sont séparées par un caractère NULL. Cela affecte:--files-from=
lit la liste des fichiers à copier (à partir de stdin: -
).-a
active le mode d'archivage, qui conserve les autorisations de fichiers, la propriété, etc.--remove-source-files
supprime les fichiers qui ont été copiés avec succès de la source.-vP
active le mode prolixe et les informations de progression.