125 votes

Déplacer des fichiers et des dossiers de manière récursive sous Linux

Pensez-y :

ls -al ../public-back
drwxrwxr-x  4 apache   apache     4096 Apr 19 03:32 templates

ls -al ../public-back/templates

drwxrwxr-x  2 apache   apache    4096 Apr 19 03:33 content
drwxrwxr-x  2 apache   apache   20480 Apr 20 06:14 images
drwxrwxr-x  2 apache   apache    4096 Apr 19 03:35 video

ls -al /public

drwxrwxr-x  4 apache   apache     4096 Apr 20 09:49 templates

ls -al /public/templates

drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 content
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 images
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 video

Comment puis-je déplacer le contenu de /public-back/templates récursivement avec des permissions dans /public/templates ?

147voto

DQdlM Points 2431

À moins que je ne comprenne mal la question, cela fonctionnerait :

mv /public-back/templates/* /public/templates

De plus, à moins que vous n'ayez une énorme liste de fichiers, l'ajout de -i demandera avant d'écraser quoi que ce soit, ce qui ajoute une certaine sécurité lors de l'utilisation de caractères génériques tels que * .

19voto

Himalay Points 367

La page de manuel de cp indique :

-p same as --preserve=mode,ownership,timestamps
-r same as --recursive=copy directories recursively

Essayez ;

cp -rp /public-back/templates/* /public/templates/

9voto

Pi Hard Points 81

Lorsque je déplace des éléments de ma clé USB vers mon système OSMC, j'ai trouvé les éléments suivants très utiles :

find /media/Pi\ Hard\ 16GB/ -name '*' -exec mv -v {} /media/External\ HDD/Videos/ \;

Explication du fonctionnement ci-dessous.

N'oubliez pas d'ajouter une barre oblique inverse avant tout espace dans les noms des répertoires source et destination (voir ci-dessus).

find  finds all files and folders in the destination path.

/media/Pi Hard 16GB/ is the path searched. Escape special char such as spaces.

-name '*' filters on names. If you do not escape or quote this then 
          the shell will expand it before find sees it.

-exec     Executes a command, in our case mv

-v        Verbose, so you can see what's happening (optional)

{}        is replaced by the name of the found object.

En fait, vous recherchez tous les fichiers et tous les dossiers et les déplacez un par un (ou si un répertoire est trouvé en premier, vous déplacez ce répertoire et son contenu). Cela lance un nouveau processus pour chaque déplacement et est très inefficace. Ne l'utilisez que lorsque les commandes habituelles échouent.

5voto

svye Points 41

Mv ne semble pas le faire. Mais vous pouvez utiliser cette petite astuce, qui fonctionne comme un charme :

tar cf - . |(cd /targetdir; tar xvf -)

et préserve les permissions et tout.

Remarque : aucune des solutions ci-dessus n'a fonctionné pour moi, d'où cette solution de contournement.

4voto

Tom Kelly Points 121

Il est possible de déplacer au lieu de copier avec rsync en utilisant le --remove-source-files argument. Cela permet de préserver les propriétés telles que les permissions et les dates de modification. Elle présente l'avantage supplémentaire de vérifier si les fichiers n'ont pas besoin d'être déplacés dans le répertoire cible (c'est-à-dire si un fichier plus récent portant le même nom y existe déjà).

rsync -arctuxz --remove-source-files /public-back/templates/* /public/templates/

Bien sûr, vous pouvez aussi copier les fichiers et supprimer le répertoire d'origine.

mkdir -p /public/templates
rsync -arctuxz --remove-source-files /public-back/templates/* /public/templates/
rm -rfi /public-back/templates/

Voici les paramètres que je recommande pour rsync mais il existe d'autres arguments pour préserver diverses propriétés ou gérer les liens et la compression/le cryptage des gros fichiers. Cette commande prend également en charge la copie vers des systèmes de fichiers distants via des tunnels ssh.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X