Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 roll

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