Comment puis-je déplacer des fichiers et pas des répertoires dans un autre dossier / dossier parent?
J'ai une structure de dossiers extrêmement moche, avec certains fichiers .mp3 enterrés 6 niveaux de profondeur dans un sous-dossier.
Je veux finir avec tous les fichiers (principalement .mp3 mais pas tous) dans un seul répertoire, sans aucun sous-répertoire, en utilisant Ubuntu.
Aidez-moi?
Il y a une excellente réponse dans le askubuntu-QA .
Pour ce faire, ouvrez un terminal et exécutez cette commande:
mv -v ~/Downloads/* ~/Videos/
Il déplacera tous les fichiers et dossiers du dossier Téléchargements vers le dossier Vidéos.
Pour déplacer tous les fichiers, mais pas les dossiers:
Mais, si vous souhaitez déplacer tous les fichiers (mais pas les dossiers) du dossier Téléchargements vers le dossier Vidéos, utilisez cette commande
find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos
Pour déplacer uniquement les fichiers des dossiers de téléchargement, mais pas des sous-dossiers:
Si vous souhaitez déplacer tous les fichiers du dossier Téléchargements, mais pas tous les fichiers dans les dossiers du dossier Téléchargement, utilisez cette commande:
find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos
Ici, l'option
-maxdepth
spécifie la façon dont la recherche profonde devrait essayer,1
signifie uniquement le répertoire spécifié dans la commande find. Vous pouvez également essayer d'utiliser2
,3
pour tester.Consultez la page de manuel Ubuntu find pour une explication détaillée.
La source
find /src/dir -type f -exec mv --backup=numbered -t /dst/dir {} +
La commande trouvera tous les fichiers réguliers sous /src/dir
(y compris tous les sous-répertoires) et les déplacer vers /dst/dir
en utilisant la commande mv
. Remplacez simplement les annuaires par le vôtre. Les fichiers avec les mêmes noms seront renommés automatiquement.
Si vous souhaitez déplacer uniquement des fichiers MP3, ajoutez -iname "*.mp3"
option à la commande find
after -type f
.
Seule la deuxième commande dans la réponse du c0dev répond à la question. Voici comment se compare-t-il à cette réponse. Les points 3. et 4. peuvent être résolus dans l'autre réponse de la même manière que ici.
mv
la solution avec -exec +
n'a pas besoin d'appeler une commande supplémentaire comme xargs
ou parallel
et remettre les noms de fichiers deux fois. --backup=numbered
. Malheureusement, ces sauvegardes avec suffixe comme ~3~
seront cachées dans la plupart des fichiers par défaut. Malheureusement, mv
ne permet pas de modifier le suffixe, mais il peut être facilement post-traité par des commandes supplémentaires. Il s'agit d'une extension GNU. -exec command {} +
-print0
-exec command {} +
fait partie des normes IEEE Std 1003.1 (POSIX), ISO / IEC 9945 et Single UNIX. Ainsi, il devrait être plus portable. Voir IEEE Std 1003.1, édition 2004 , IEEE Std 1003.1, Edition 2013 et 0000243: Ajoutez -print0 à "trouver" . Mais de toute façon, le changement de mv
requis de mv
est une extension GNU, de sorte que la commande entière n'est pas portable entre les systèmes POSIX. Remarque: dans le cas, la find
pourrait générer des chemins commençant par -
(je ne connais pas une telle implémentation de find
pour le moment.) Le {}
devrait être précédé de l'indicateur de fin de page: --
.
Malheureusement, je n'ai pas une réputation suffisamment élevée pour commenter la solution marquée. Cependant, je voulais avertir les autres sur un problème que j'ai rencontré. C'est assez amateur; Cependant, lorsque vous faites plusieurs choses, cela ne vous rappelle pas tout d'abord. J'espère que cela aidera les autres.
Des modifications du message suivant ont été fournies après le lancement de la commande. La commande crée alors plusieurs fichiers.
mv: `/data/share/docs/src/dir/filename.ext' and `/data/share/docs/src/dst/filename.ext' are the same file
Le /src
est un parent du /dst
(ex: /src/../dst/
).
Bien qu'il puisse y avoir une meilleure solution, j'ai simplement déplacé les fichiers dans un répertoire temporaire en dehors de my /src
, puis redémarrez la commande pour les placer dans le répertoire /src/../dst
dans /src/../dst
je voulais finir.