Ça va être un peu délicat, je suppose :-)
Lorsque j'ouvre un terminal dans le dossier et exécute un script, ce script doit:
Le dossier parent dans lequel nous nous trouvons ne contiendra aucun dossier, mais seulement le contenu de tous les dossiers.
Cela devrait également fonctionner pour les fichiers et dossiers cachés. Ce serait extrêmement utile pour le ménage :-)
J'ai essayé quelque chose comme:
find . -type f -name "*" -depth | xargs mv ./
Mais sans chance.
Merci de votre aide :-)
La manière la plus simple et la plus propre, à mon avis, serait d'utiliser cette commande:
find . -type f -exec mv --backup=numbered {} . \; && find . -maxdepth 1 -type d -exec rm -r {} +
find
commande n ° 1:
.
: recherche dans le répertoire de travail actuel;-type f
: recherche des fichiers;-exec [...]
: exécute une commande pour chaque résultat (en utilisant {} [...] \;
) ou une commande pour tous les résultats (en utilisant {} +
);mv --backup=numbered . \;
: déplace chaque résultat dans le répertoire de travail actuel, créant une sauvegarde des fichiers avec le même nom de fichier déjà dans le répertoire de travail actuel;find
commande n ° 2:
.
: recherche dans le répertoire de travail actuel;-maxdepth 1
: recherche uniquement dans le premier niveau de la hiérarchie du répertoire cible;-type d
: recherche des répertoires;-exec [...]
: exécute une commande pour chaque résultat (en utilisant {} [...] \;
) ou une commande pour tous les résultats (en utilisant {} +
);rm -r {} +
: supprime chaque résultat;Test sur une hiérarchie de répertoires de tests:
user@debian ~/tmp % tree -a
.
├── 1
│ ├── file1
│ ├── file2
│ ├── file3
│ └── .hidden
├── 2
│ ├── file1
│ ├── file2
│ ├── file3
│ └── .hidden
└── 3
├── file1
├── file2
├── file3
└── .hidden
3 directories, 12 files
user@debian ~/tmp % find . -type f -exec mv --backup=numbered {} . \; && find . -type d -exec rm -r {} +
rm: refusing to remove "." or ".." directory: skipping "."
user@debian ~/tmp % tree -a
.
├── file1
├── file1.~1~
├── file1.~2~
├── file2
├── file2.~1~
├── file2.~2~
├── file3
├── file3.~1~
├── file3.~2~
├── .hidden
├── .hidden.~1~
└── .hidden.~2~
0 directories, 12 files
Pour déplacer tous les fichiers de manière récursive dans le répertoire en cours, notez que cela déplacera tous les fichiers dans ce répertoire (pas leurs répertoires parents):
find . -type f -exec mv -i -t . {} +
Au lieu de -i
, vous pouvez utiliser --backup=numbered
comme déjà montré par @kos.
Pour supprimer tous les répertoires vides:
find . -type d -empty -delete
Lisez man find
pour avoir plus d'idées.
Cela devrait faire l'affaire pour vous:
find . -type f -exec mv --backup=numbered "{}" . \; && find . -type d -empty -delete
C'est 2 commandes find, la première trouve et déplace les fichiers, la seconde ne fonctionnera que si la première commande réussit et supprimera les répertoires.
Merci à Rinzwind d'avoir signalé le danger de doublons de noms de fichiers, m'invitant à ajouter l'option --backup=numbered
utilisée à l'origine par Kos.