J'ai plusieurs fichiers dans plusieurs dossiers sous un même répertoire qui doivent se trouver dans un seul dossier. Existe-t-il une ligne de commande qui puisse m'aider à accomplir cette tâche ?
Réponses
Trop de publicités?Utilisation de find
+ xargs
+ mv
:
find . -type f -print0 | xargs -0 -I file mv --backup=numbered file .
Ceci déplacera tous les fichiers du répertoire de travail actuel et de ses sous-répertoires (de manière récursive) dans le répertoire de travail actuel, en numérotant numériquement les fichiers ayant le même nom de fichier afin d'éviter les écrasements de fichiers ayant le même nom de fichier.
Exemple de résultat sur un tmp
avec un 1
, 2
y 3
des sous-dossiers contenant chacun un 1.ext
, 2.ext
y 3.ext
fichier :
ubuntu@ubuntu:~/tmp$ tree
.
1
1.ext
2.ext
3.ext
2
1.ext
2.ext
3.ext
3
1.ext
2.ext
3.ext
3 directories, 9 files
ubuntu@ubuntu:~/tmp$ find . -type f -print0 | xargs -0 -I file mv --backup=numbered file .
ubuntu@ubuntu:~/tmp$ tree
.
1
1.ext
1.ext.~1~
1.ext.~2~
2
2.ext
2.ext.~1~
2.ext.~2~
3
3.ext
3.ext.~1~
3.ext.~2~
3 directories, 9 files
Vous pouvez le faire en utilisant find
:
find . -type f -exec mv -i -t new_dir {} +
Dans un premier temps, créez le répertoire ( mkdir new_dir
) où vous voulez déplacer tous les fichiers, ici nous déplaçons tous les fichiers dans le répertoire ./new_dir
répertoire.
-
find . -type f
trouvera tous les fichiers sous tous les répertoires sous le répertoire courant, donc vous devezcd
dans le répertoire qui contient tous les sous-répertoires ou vous pouvez utiliser le chemin absolu, par ex.~/foo/bar
-
En
-exec
prédicat defind
exécutera lemv
qui déplacera tous les fichiers trouvés vers le répertoirenew_dir
répertoire. Une fois encore, vous pouvez utiliser le chemin absolu. -
mv -i
vous demandera avant d'écraser un fichier.
Si le nouveau répertoire est situé ailleurs, utilisez les chemins absolus :
find ~/path/to/dir -type f -exec mv -i -t ~/path/to/new_dir {} +
Vous pouvez utiliser la commande :
find . -type f -execdir mv '{}' /parent-dir \;
man find
-execdir utility [argument ...] ;
The -execdir primary is identical to the -exec primary with the exception that
utility will be executed from the directory that holds the current
file. The filename substituted for the string ``{}'' is not qualified.