#1 Le 29/01/2020, à 20:49
- alan2010
[Débutant] Gestion dossiers
Bonjour,
Je vous expose mon problème :
J'ai un dossier, disons test, mon répertoire courant.
Dans ce dossier, il y a des fichiers et d'autres dossiers.
Disons que le dossier test contient deux dossiers dir1 et dir2 et un fichier fich1.txt
Chacun des sous-dossiers peut contenir des fichiers et des dossiers.
Dans dir1, il y a un dossier dir3 et un fichier fich2.txt
Dans dir2, il y a deux fichiers fich3.txt et fich4.txt
Je souhaite trouver une commande qui permet d'extraire le contenu de tous les dossiers (ici dir1 et dir2) dans le dossier test.
Je ne souhaite pas devoir écrire le nom de chaque dossier à la main.
Le dossier réel auquel je souhaite appliquer le traitement contient de nombreux sous-dossiers.
Je suis débutant en bash mais j'ai trouvé que la commande ls -d */ fournit le nom de tous les dossier du répertoire courant. Il faudrait passer le retour de cette commande en argument de la commande mv a priori...
Merci beaucoup pour votre aide.
Hors ligne
#2 Le 29/01/2020, à 21:34
- Sciensous
Re : [Débutant] Gestion dossiers
réponse rapide:
en admettant que tous les fichiers ont des noms différents
for f in *;do mv -b "$f" .;done
réponse plus longue:
pour tenir comptes de noms identiques, il faut passer par un test [ -f "$f" ] et renommer
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#3 Le 29/01/2020, à 21:40
- alan2010
Re : [Débutant] Gestion dossiers
Bonsoir,
Merci pour la réponse.
Est-ce obligatoire de passer par une boucle ?
Merci
Hors ligne
#4 Le 29/01/2020, à 21:54
- Sciensous
Re : [Débutant] Gestion dossiers
non mais comme j'écrivais c'est une réponse rapide (en fait, plutôt une piste car il faut tester aussi d'il s'agit de fichier ou de dossier --> [ -f "$f" ] )
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#5 Le 29/01/2020, à 22:14
- nany
Re : [Débutant] Gestion dossiers
Bonjour,
Pas sûr que la commande donnée par sciensous réponde à ta demande (que j’ai du mal à comprendre).
De ce que j’ai compris, je proposerais :
find ./*/* -maxdepth 0 -name "*" -exec mv -v '{}' . \;
Dernière modification par nany (Le 29/01/2020, à 22:39)
En ligne
#6 Le 29/01/2020, à 22:43
- Watael
Re : [Débutant] Gestion dossiers
ls -d */
ne fournit pas la liste des répertoires.
le développement (*/) des noms des répertoires est réalisé par le shell.
tu aurais le même résultat avec
printf '%s\n' */
l'exposé est un peu confus.
tu veux déplacer tous les fichiers (QUE les fichiers) du répertoire courant et de tous ses sous-répertoires, c'est ça ?
et tu veux les déplacer où ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 30/01/2020, à 00:18
- kamaris
Re : [Débutant] Gestion dossiers
Si j'ai bien compris moi aussi, tu veux faire remonter tout ce qu'il y a dans les sous-répertoires du répertoire de travail d'un cran dans l'arborescence.
Alors c'est ce que fait la commande de nany en #5, ou bien tu peux faire
shopt -s dotglob && for f in */*; do mv "$f" .; done
Dans ton exemple, ça donne ça :
$ tree
.
├── dir1
│ ├── dir3
│ └── fich2.txt
├── dir2
│ ├── fich3.txt
│ └── fich4.txt
└── fich1.txt
3 directories, 4 files
$ shopt -s dotglob && for f in */*; do mv "$f" .; done
$ tree
.
├── dir1
├── dir2
├── dir3
├── fich1.txt
├── fich2.txt
├── fich3.txt
└── fich4.txt
3 directories, 4 files
$
Par contre, il reste à faire attention aux doublons comme dit Sciensous en #2.
Hors ligne
#8 Le 31/01/2020, à 14:23
- alan2010
Re : [Débutant] Gestion dossiers
Bonjour à tous,
Merci pour vos réponses.
La commande proposée par nany m'a permis de résoudre le problème.
Merci encore pour votre disponibilité
Hors ligne