# Créer des dossiers avec le nom des fichiers existants

**URL:** <https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815>\
**Category:** Support Debian\
**Created:** [Octobre 22, 2018, 5:26 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815 "2018-10-22T05:26:06Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mr.Hyde](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mr.hyde/32/7443_2.png) [@Mr.Hyde](https://www.debian-fr.org/u/Mr.Hyde)\
**Post date:** [Octobre 22, 2018, 5:26 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815/1 "2018-10-22T05:26:06Z")

</div>

Bonjour à toutes et à tous !

Je recherche à créer des dossiers pour-y mettre des fichiers, le problème c’est le nombre de fichiers à gérer, le faire manuellement demanderai pas mal de temps, aussi j’aurai voulu savoir si il était possible de le faire à l’aide d’un logiciel ou d’une commande pour le faire en lot…

Pour le moment j’ai des fichiers nommés comme cela :  
`Mon curé chez les nudistes.avi`

J’aurai voulu créer un dossier avec le même nom et-y mettre le fichier `.avi` à l’intérieur :  
**`Mon Curé chez les nudistes`** `\Mon curé chez les nudistes.avi`

Ensuite j’ajouterai manuellement pour chacun d’eux des infos qui me permettrons de faire des recherches plus facilement avec le programme “rechercher des fichiers”

Dossier :  
`Mon curé chez les nudistes` **`- 1976 - Français - Paul Presbois, Michel Galabru`**

Fichier inclus dans ce dossier :  
`Mon curé chez les nudistes.avi`

Au final si je fait une recherche avec le programme “rechercher des fichiers” (par année, acteur, etc) je devrait avoir ça :

```nohighlight
...\Mon curé chez les nudistes - 1976 - Français - Paul Presbois, Michel Galabru\Mon curé chez les nudistes.avi

```

J’ai essayé pas mal de gestionnaire de films mais aucun ne m’a satisfait, je cherche donc à faire cela moi-même au niveau des dossiers.

Salut 😉

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Octobre 22, 2018, 7:08 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815/2 "2018-10-22T07:08:50Z")

</div>

Bonjour

> [@Mr.Hyde](#):
>
> …  
> Pour le moment j’ai des fichiers nommés comme cela :  
> `Mon curé chez les nudistes.avi`
> 
> J’aurai voulu créer un dossier avec le même nom et-y mettre le fichier .avi à l’intérieur :  
> **`Mon Curé chez les nudistes`** `\Mon curé chez les nudistes.avi`  
> …

```plaintext
fichsAvi=( *.avi ); for fich in "${fichsAvi[@]}"; do mkdir "${fich%.*}" && mv "$fich" "${fich%.*}"; done

```

---

<div class="post-metadata">

**Author:** ![Mr.Hyde](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mr.hyde/32/7443_2.png) [@Mr.Hyde](https://www.debian-fr.org/u/Mr.Hyde)\
**Post date:** [Octobre 22, 2018, 9:54 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815/3 "2018-10-22T09:54:54Z")

</div>

Bonjour et merci pour l’intérêt 😉

Quand j’ai envoyé la commande, cela m’a créé un fichier \* à la racine du disque, que j’ai retrouvé en affichant les dossiers cachés. Mais cela ne correspond pas à ce que j’attendais ; il faudrait que je créer un dossier avec le même nom que le fichier en .Avi, mais cela en lot (pour chacun des fichiers .Avi existants sur mon DDE)

 ![Capture](https://www.debian-fr.org/uploads/default/original/2X/c/c7eae1117c918fd5ff297fd31cce939843d23eae.png)

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Octobre 22, 2018, 10:44 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815/4 "2018-10-22T10:44:50Z")

</div>

> [@Mr.Hyde](#):
>
> Quand j’ai envoyé la commande, cela m’a créé un fichier \* à la racine du disque…

Mais tu ne nous a pas dit où sont situés tes fichiers `.avi`,  
ni depuis quel répertoire et avec quel compte utilisateur tu as lancé la commande.

J’ai donc supposé que tu lancerais la ligne de commande que je te proposais  
depuis le répertoire dans lequel seraient présents les fichiers à déplacer  
et dans lequel seront créés les répertoires nommés,  
et avec le compte utilisateur auquel ces fichiers appartiennent  
en espérant que tu aies les privilèges nécessaires pour créer ces répertoires.

> [@Mr.Hyde](#):
>
> … cela m’a créé un fichier \* à la racine du disque…

Je suppose donc que tu avais malheureusement lancé cette ligne de commande depuis la racine du système de fichiers avec les privilèges du compte `root`.  
La ligne de commande que je t’ai proposé, si elle a effectivement été lancée avec les privilèges du compte `root` et depuis la racine de ton système de fichiers a certainement dû créer un **répertoire** nommé `*` plutôt qu’un fichier.  
Et un message d’erreur a dû s’afficher puisqu’il n’existait aucun fichier nommé `*.avi` à déplacer :

```plaintext
mv: impossible d'évaluer '*.avi': Aucun fichier ou dossier de ce type

```

* * *

Si tu veux une ligne de commande plus spécifique au contexte dans lequel tu voudrais la lancer, il faudra un peu plus d’informations concernant ce contexte.

Le retour d’un  
`ls -l /chemin/absolu/du/répertoire/contenant/les/fichiers/avi/*.avi`  
listant ces fichiers `.avi` et les attributs les concernant me permettra sans doute de pouvoir te proposer une ligne de commande plus adaptée au contexte dans lequel tu voudrais la lancer.  
Cela me permettra aussi de savoir quels privilèges ou compte utilisateur il faudra utiliser pour lancer cette ligne de commande.

Si ces fichiers `.avi` sont dans plusieurs répertoires ou/et qu’ils appartiennent à différents comptes utilisateurs  
il faudra utiliser une toute autre méthode.

---

<div class="post-metadata">

**Author:** ![Mr.Hyde](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mr.hyde/32/7443_2.png) [@Mr.Hyde](https://www.debian-fr.org/u/Mr.Hyde)\
**Post date:** [Octobre 22, 2018, 2:57 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815/5 "2018-10-22T14:57:14Z")

</div>

En effet j’ai lancé cette commande depuis le bureau et j’ai eu l’erreur que tu as écrit :

> [@anon29980398](#):
>
> ```plaintext
> mv: impossible d'évaluer '*.avi': Aucun fichier ou dossier de ce type
> 
> ```

Voici le retour de la commande (un extrait, la liste est trop longue…) :

> [@anon29980398](#):
>
> `ls -l /chemin/absolu/du/répertoire/contenant/les/fichiers/avi/*.avi`

```plaintext
 -rw------- 1 wx wx 843758194 août 5 2013 /media/wx/4455B6E44083FC48/Shaft - Les Nuits Rouges de Harlem.avi

```

Les fichiers pour lesquels je voudrais créer des dossiers se trouvent sur le même disque dur externe

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Octobre 22, 2018, 3:13 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815/6 "2018-10-22T15:13:13Z")

</div>

Ok, je comprends beaucoup mieux : les fichiers **`.avi`** sont dans un système de fichiers  
dont la racine utilise le point de montage `/media/wx/4455B6E44083FC48`

En utilisant le compte utilisateur qui pourra accéder à ces fichiers (je suppose qu’il s’agit du compte `wx`),  
entre consécutivement les deux lignes de commandes suivantes :

```nohighlight
fichsAvi=($(find /media/wx/4455B6E44083FC48 -name *.avi 2>/dev/null))
for fich in "${fichsAvi[@]}"; do mkdir "${fich%.*}" && mv "$fich" "${fich%.*}"; done

```

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Octobre 22, 2018, 4:34 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815/7 "2018-10-22T16:34:55Z")

</div>

> [@Mr.Hyde](#):
>
> J’aurai voulu créer un dossier avec le même nom et-y mettre le fichier `.avi` à l’intérieur :  
> **`Mon Curé chez les nudistes`** `\Mon curé chez les nudistes.avi`
> 
> Ensuite j’ajouterai manuellement pour chacun d’eux des infos qui me permettrons de faire des recherches plus facilement avec le programme “rechercher des fichiers”

Ce qui paraît être une bonne idée, ne l’est pas forcement.  
Mieux vaut écrire un fichier texte portant le nom du fichier AVI dans le répertoire en question, et lors du parcours des répertoires, consultez celui-ci.

Pourquoi ? La longueur du nombre de caractères autorisés par ton FS… dans les noms de répertoires.

Alors que segmenter l’information dans un fichier texte, sera plus aisé, tel que :

```
Titre:
Année:
Langue:
Auteurs:

```

sera très simple à manipuler quelque soit le langage utilisé 😉  
(et ne t’alourdira pas le poids en octets…)

---

<div class="post-metadata">

**Author:** ![Mr.Hyde](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mr.hyde/32/7443_2.png) [@Mr.Hyde](https://www.debian-fr.org/u/Mr.Hyde)\
**Post date:** [Octobre 24, 2018, 5:03 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815/8 "2018-10-24T05:03:23Z")

</div>

Merci à vous deux pour l’aide et avis 😉

@anon29980398 : Je vais faire un premier essai sur une plus petite collection en premier lieu, histoire de voir le résultat, pense-tu que ces commandes peuvent fonctionner avec cet autre volume, la différence c’est le répertoire en plus «&nbsp;`films`&nbsp;» dans ce volume :  
`/media/wx/F8D3-AE96/` **`films`**

Ce qui devrait donner les commandes suivantes :

> [@](#):
>
> ```plaintext
> fichsAvi=($(find /media/wx/F8D3-AE96/films -name *.avi 2>/dev/null)) 
> for fich in "${fichsAvi[@]}"; do mkdir "${fich%.*}" &amp;&amp; mv "$fich" "${fich%.*}"; done
> 
> ```

@PengouinPdt:  
Oui tu as raison, il-y-a un risque de ce côté, mais je n’ai rien constaté avec mon système (Point Linux «&nbsp;Jessie&nbsp;» - Mate - 32bits) ainsi qu’avec Windows 10 (pas encore testé sous Ubuntu, XP, Seven) donc cela me convient, mais j’y avais pensé, ce qui m’a fait changé d’avis c’est quand je suis allé voir un pote sous W$ 10 qui avait ce système de classement et j’ai été bluffé par la facilité avec laquelle il «&nbsp;sortait&nbsp;» des films avec différents critères, juste avec une recherche (sans passer par un logiciel tiers)  
Ceci dit, je vais couper la poire en deux et mettre uniquement le genre du film après le titre, les autres infos (pays, acteurs, année, etc) je les incluraient dans des fichiers textes ultérieurement.

Salut

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Octobre 24, 2018, 7:58 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815/9 "2018-10-24T07:58:58Z")

</div>

Bonjour

> [@Mr.Hyde](#):
>
> …  
> pense-tu que ces commandes peuvent fonctionner avec cet autre volume, la différence c’est le répertoire en plus “`films`” dans ce volume :  
> `/media/wx/F8D3-AE96/` **`films`**

Aucun problème, ça fonctionnera.

Je précise aussi que la ligne de commande find que je t’avais proposé  
prenait en compte tous les fichiers dont le nom d’extension est «&nbsp;.avi&nbsp;»  
dans le chemin spécifié et dans tous les sous-répertoires de ce chemin.  
Ce qui correspondait à ce que tu avais demandé :

> [@Mr.Hyde](#):
>
> …(pour chacun des fichiers .Avi existants sur mon DDE)

* * *

Si tu veux ne traiter que les fichiers d’un répertoire donné  
sans prendre en compte les fichiers contenus dans ses sous-répertoires,

il faudrait ajouter à la ligne de commande `find` l’option `-maxdepth 1`

Donc, pour ne prendre en compte que les fichiers `.avi` du répertoire `/media/wx/F8D3-AE96/films`  
sans prendre en compte les fichiers qui seraient contenus  
dans les sous-répertoires de `/media/wx/F8D3-AE96/films`

```plaintext
fichsAvi=($(find /media/wx/F8D3-AE96/films -maxdepth 1 -name *.avi 2> /dev/null))
for fich in "${fichsAvi[@]}"; do mkdir "${fich%.}" && mv "$fich" "${fich%.*}"; done

```

---

<div class="post-metadata">

**Author:** ![Mr.Hyde](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mr.hyde/32/7443_2.png) [@Mr.Hyde](https://www.debian-fr.org/u/Mr.Hyde)\
**Post date:** [Octobre 29, 2018, 12:57 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815/10 "2018-10-29T12:57:39Z")

</div>

Bonjour,

Lorsque je copie/colle la commande que tu m’as donné, j’ai le message d’erreur suivant :

> Citation

```auto
fichsAvi=($(find /media/wx/F8D3-AE96/films -name *.avi 2>/dev/null)) 
for fich in "${fichsAvi[@]}"; do mkdir "${fich%.*}" &amp;&amp; mv "$fich" "${fich%.*}"; done

```

> Citation  
> erreur de syntaxe près du symbole inattendu « ;& »

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Octobre 29, 2018, 1:25 UTC](https://www.debian-fr.org/t/creer-des-dossiers-avec-le-nom-des-fichiers-existants/77815/11 "2018-10-29T13:25:52Z")

</div>

Bonjour

Le système que tu utilises pour faire un copié/collé  
ou/et le navigateur web que tu utilises  
ou/et l’application dans laquelle tu colles la ligne de commandes  
interprètent certains caractères.

Dans la ligne de commande que je t’ai proposée,  
la suite des deux caractères **&&** a été interprétée par ton copié/collé  
ce qui fait qu’elle a été transformée, une fois collée, en une suite de caractères **`&amp;&amp;`**

Donc, une fois collée dans la fenêtre du terminal,  
pour corriger cette interprétation parasite,  
il te faut remplacer dans la ligne de commandes collée  
la suite de caractères :  
**`&amp;&amp;`**

par :  
**`&&`**
