CentOS 5.x
Je m'excuse s'il s'agit d'une question répétée. J'ai vu beaucoup de questions similaires (concernant la suppression de fichiers) mais pas exactement le même scénario.
J'ai un répertoire contenant des centaines de milliers de fichiers (peut-être plus d'un million) et comme solution à court terme à un problème différent, je dois déplacer ces fichiers vers un autre emplacement.
Aux fins de la discussion, disons que ces fichiers résident à l'origine /home/foo/bulk/
et que je souhaite les déplacer vers/home/foo2/bulk2/
Si j'essaye, mv /home/foo/bulk/* /home/foo2/bulk2/
j'obtiens une erreur "trop d'arguments".
M. Google me dit qu'une alternative pour supprimer des fichiers en masse serait d'exécuter find. Quelque chose comme: find . -name "*.pdf" -maxdepth 1 -print0 | xargs -0 rm
Ce serait bien si je supprimais des trucs mais dans ce cas, je veux déplacer les fichiers ... Si je tape quelque chose comme find . -name "*" -maxdepth 1 -print0 | xargs -0 mv /home/foo2/bulk2/
bash se plaint que le fichier n'est pas un répertoire.
Quelle est la meilleure commande à utiliser ici pour déplacer les fichiers en bloc d'un répertoire à un autre?
Envisagez
mv
le répertoire parent au lieu des fichiers:(Mais cela peut causer des problèmes s'il
/home/foo/bulk
doit exister à chaque instant.)la source
mkdir
? Et qu'en est-il de ce répertoire «existant à chaque instant» ou non? Pourquoi cela accélérerait-il les choses?mkdir
parce que le dossier entier et tout ce qu'il contient seraient déplacés dans l'autre répertoire et n'existeraient plus dans l'ancien répertoire. Il garantit que l'ancien répertoire existe toujours. Cependant, cela ne serait pas suffisant s'il y avait un service en cours d'exécution qui dépendait du premier répertoire toujours existant, car il est déplacé puis recréé. Cela ne fait rien de plus rapide, juste plus simple en fournissant moins d'arguments.Juste pour la variété, j'aime utiliser cpio pour certains cas comme celui-ci.
la source
-print0
et d'-0
options.Avec GNU
mv
:Sur des systèmes comme OS X qui n'ont pas
mv -t
mais ont-print0
etxargs -0
:Ou si les noms de fichiers ne contiennent pas d'espaces, de guillemets, de barres obliques inverses ou de nouvelles lignes (avec OS X
xargs
) ou de guillemets, de barres obliques inverses ou de nouvelles lignes (avec GNUxargs
):la source
Pour une durée spécifiée, essayez ce qui suit:
la source