J'ai un tas de fichiers .zip dans plusieurs répertoires:
Fol1/Fol2
Fol3
Fol4/Fol5
Comment pourrais-je les déplacer tous vers un dossier de base commun?
command-line
files
find
recursive
InquilineKea
la source
la source
Réponses:
Allez dans le répertoire toplevel de l’arborescence contenant les fichiers zip (
cd …
), puis exécutezCela fonctionne hors de la boîte en zsh. Si votre shell est bash, vous devrez d'
shopt -s globstar
abord l' exécuter (vous pouvez et devriez mettre cette commande dans votre~/.bashrc
). Si votre shell est en ksh, vous devrez d'set -o globstar
abord l' exécuter (mettez-le dans votre~/.kshrc
).Alternativement, utilisez
find
qui fonctionne partout sans préparation particulière mais qui est plus compliqué:Si vous voulez ensuite supprimer les répertoires vides, en zsh:
En bash ou en ksh:
et répétez tant qu'il y a des répertoires vides à supprimer. Alternativement, dans n'importe quelle coquille
la source
find
commande ci-dessus a fonctionné sous bash, mais a dû être remplacée parfind . -name
etc. pour que cela fonctionne..
est implicite pour la recherche GNU mais pas pour les autres, je l'ai ajouté explicitement.Si vous voulez seulement déplacer les
.zip
fichiers, vous pouvez faire quelque chose comme:la source
Si vous utilisez bash version 4 ou supérieure ou zsh, vous pouvez également utiliser la méthode de redimensionnement récursif:
Cela déplacera SEULEMENT les fichiers et non leurs chemins relatifs, ainsi des collisions pourraient se produire.
la source
Celui-ci est sûr lorsque vous déplacez des données et sans erreur qui supportait la plupart des distributions indépendamment des versions. Cette commande va scanner les sous-répertoires puis les déplacer ou les copier dans votre nouveau répertoire de destination.
*.flac
quelque chose comme*.zip
dans votre cas. Ou*.doc
tout simplement une extension fonctionne.mv
est la commande pour déplacer des fichiers, ou vous pouvez utilisercp
pour copier des données au lieu de déplacer../flac/
est le répertoire de destination vers lequel je veux déplacer tous les fichiers FLAC. Vous pouvez également lui donner un chemin complet comme/home/myid/flac/
Exemple complet. (Dans ce cas, il y a beaucoup de sous-répertoires avec le nom d'artiste de musique à
/home/myid/Music/
et les fichiers FLAC sont répartis sur différents niveaux de sous-répertoires. Comme je n'ai pas besoin de dossiers d'artistes, je veux que tous les fichiers FLAC soient dans un répertoire à/home/myid/Music/flac/
Ensuite, tous les fichiers FLAC seront affichés.
la source
;
faire?En tant que bash hack, vous pouvez utiliser le pouvoir de
tar
:Cela présente l'avantage de ne pas dépendre des extensions de fichier, car elle utilise la
file
commande pour choisir les fichiers à déplacer et préserve la structure des répertoires, mais elle ne fonctionne pas avec les chemins contenant des espaces.La finale
rm
est juste là pour supprimer les fichiers originaux (car @ InquilineKea a dit qu'il ne se souciait pas du dossier original dans le commentaire).Bien entendu, cela convient particulièrement si les dossiers origin / et target / se trouvent sur des disques différents. Sinon, les autres solutions proposées sont plus efficaces (même si elles reposent sur des conventions de dénomination plutôt que sur
file
le contenu).la source
En supposant que vous ayez les versions GNU de find et mv, les solutions suivantes seront plus efficaces que les réponses existantes basées sur find:
L'utilisation de a
+
à la fin de find -exec signifie qu'une liste de fichiers sera transmise à la commande mv, au lieu d'exécuter une commande mv par fichier trouvé. Cependant, une limitation de ceci est que vous ne pouvez placer que le '{}' à la fin de la commande, ce qui nécessite l'utilisation de l'option mv --target-directory et, autant que je sache, il s'agit d'un GNU-ism.la source