# Créer des fichiers vide avec un script bash

**URL:** <https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 2:20 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372 "2016-02-21T02:20:35Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![tidoye](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/9dc877/32.png) [@tidoye](https://www.debian-fr.org/u/tidoye)\
**Post date:** [Février 21, 2016, 2:20 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/1 "2016-02-21T02:20:35Z")

</div>

Bonjour,  
je manque un peu d’expérience en script bash ce qui m’amène à vous poser la question.

Je possède un fichier texte à ce nom : liste\_films\_inverse.csv  
voici un exemple de ce qu’il contient.

HOR/Frisson\_4.avi  
KID/Lion\_King\_The.avi  
ACT/Matrix\_The.avi

J’ai déjà des dossier de créer selon la catégorie  
Les dossier crées sont dans /laboratoire10

Je cherche le code pour créer des fichier avec le nom des films : (Frisson\_4.avi) et les trier automatiquement dans les dossiers de leur catégorie. Est-ce que quelqu’un peut m’aider?

Voici le script bash que j’ai fais jusqu’à présent:

#Inverser toutes les colonnes  
cat liste\_films.csv | inverse \> liste\_films\_inverse.csv

#Remplacement et ajout  
cd /laboratoire10  
find /liste\_films\_inverse.csv -type f -print0 | xargs -0 sed -i 's/ /_/g’  
find /liste\_films\_inverse.csv -type f -print0 | xargs -0 sed -i 's/-/_/g’  
find /liste\_films\_inverse.csv -type f -print0 | xargs -0 sed -i 's/"//g’  
find /liste\_films\_inverse.csv -type f -print0 | xargs -0 sed -i 's/:/\_/g’  
find /liste\_films\_inverse.csv -type f -print0 | xargs -0 sed -i ‘s/$/.avi/g’

#Créer les dossiers  
cat liste\_films\_inverse.csv | cut -d’/’ -f1 | sort -n | uniq -c | xargs mkdir -pv ./

#Créer les fichiers  
…

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:20 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/2 "2016-02-21T02:20:36Z")

</div>

Je transfère ton fil vers la section “Programmation”, plus à même d’y trouver un echo.

---

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 21, 2016, 2:20 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/3 "2016-02-21T02:20:39Z")

</div>

pour créer un fichier vide : touch

---

<div class="post-metadata">

**Author:** ![tidoye](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/9dc877/32.png) [@tidoye](https://www.debian-fr.org/u/tidoye)\
**Post date:** [Février 21, 2016, 2:21 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/4 "2016-02-21T02:21:32Z")

</div>

Je sais que la commande touch crée un fichier vide. Mais le code que je cherche est celui qui prendra une ligne dans un texte et que ce texte pris deviendra le nom d’un fichier.

---

<div class="post-metadata">

**Author:** ![eol](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/b782af/32.png) [@eol](https://www.debian-fr.org/u/eol)\
**Post date:** [Février 21, 2016, 2:21 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/5 "2016-02-21T02:21:36Z")

</div>

Bonjour,  
quelquechose comme :`#!/bin/sh
while read line; do
    touch $line
done < liste_films_inverse.csv` ?

---

<div class="post-metadata">

**Author:** ![branch](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/ee7513/32.png) [@branch](https://www.debian-fr.org/u/branch)\
**Post date:** [Février 21, 2016, 2:21 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/6 "2016-02-21T02:21:39Z")

</div>

Bonjour,

On peut aussi le faire avec awk :

```auto

```

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:21 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/7 "2016-02-21T02:21:44Z")

</div>

Plus simple :

```auto

```

(non je ne crois pas que c’est un uuoc)

---

<div class="post-metadata">

**Author:** ![M3t4linux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/5daacb/32.png) [@M3t4linux](https://www.debian-fr.org/u/M3t4linux)\
**Post date:** [Février 21, 2016, 2:21 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/8 "2016-02-21T02:21:44Z")

</div>

uuoc = “Useless use of cat”

Le but premier de cat est de concatener des fichiers, c’est ça??

L’employer dans un autre but entre dans un uuoc?

Je me rends compte que je n’utilise cat seulement que pour afficher le contenu de fichier… ![:075](https://www.debian-fr.org/uploads/default/original/1X/660d70f9421e915a2561756e6d9f245d4f609347.gif "dequoi")

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:21 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/9 "2016-02-21T02:21:45Z")

</div>

Ça n’est pas grâve hein ? C’est juste un amusement les UUOC.

less avec les bonnes options permet de remplacer de manière agréable cat (par exemple quand le fichier est court il l’écris simplement sur sa sortie standard avant de quitter, on peut faire des recherches dans le fichier affiché).

Mais tu peut aussi essayer most qui a l’aire pas mal non plus.

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 2:21 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/10 "2016-02-21T02:21:45Z")

</div>

Bonjour,  
effectivement, le cat n’est pas nécessaire :

```auto
touch $(<fichier)
```

suffit…

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:21 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/11 "2016-02-21T02:21:45Z")

</div>

Merci tu viens de me faire découvrir quelque chose j’avais jamais pensé à utiliser la redirection de flux sans commande avant.

---

<div class="post-metadata">

**Author:** ![branch](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/ee7513/32.png) [@branch](https://www.debian-fr.org/u/branch)\
**Post date:** [Février 21, 2016, 2:25 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/12 "2016-02-21T02:25:57Z")

</div>

Bonjour,

Vous ne gérez pas les espaces dans les noms de fichier correctement. Mais bon apparemment tidoye met des underscore partout.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:25 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/13 "2016-02-21T02:25:57Z")

</div>

Pas faux :

`t="$IFS"
IFS="
"
touch $(<fichier)
IFS=$t`

---

<div class="post-metadata">

**Author:** ![lcaz](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lcaz/32/3546_2.png) [@lcaz](https://www.debian-fr.org/u/lcaz)\
**Post date:** [Février 21, 2016, 2:26 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/14 "2016-02-21T02:26:05Z")

</div>

set – $(\<fichier); for i; do :\>$i; done

Non? 🙂

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 2:26 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/15 "2016-02-21T02:26:10Z")

</div>

autant faire :

```auto
while read; do :>"${REPLY}"; done < "${fichier}"
```

ce qui évitera de lire 1 fois le fichier puis de le parcourir avec le for alors qu’ainsi il est lu et traité en même temps…

ou encore :

`
xargs -I{} touch "{}" < ${fichier}
` (mais pas vraiment performant car touch sera exécuté autant de fois qu’il y a de ligne dans le fichier)

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:26 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/16 "2016-02-21T02:26:11Z")

</div>

On va s’amuser tous ensemble :

```auto

```

Pas testé mais ça devrait marcher. C’est simple mais ça manque de performance comme pour xargs.

Et un dernier pour la route :

```auto

```

possible aussi en awk :

```auto

```

---

<div class="post-metadata">

**Author:** ![branch](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/ee7513/32.png) [@branch](https://www.debian-fr.org/u/branch)\
**Post date:** [Février 21, 2016, 2:26 UTC](https://www.debian-fr.org/t/creer-des-fichiers-vide-avec-un-script-bash/32372/17 "2016-02-21T02:26:15Z")

</div>

Tant qu’on y est … ![:005](https://www.debian-fr.org/uploads/default/original/1X/cdd45e7dd754015ac5291329b843a2851a0d4fe8.gif "chaud")

Autant faire attention aux lignes du style :

`azerty;" rm -rf / "
azerty; rm -rf /`

Donc personnellement, je ferais :

```auto

```

On peut optimiser, mais ce n’est pas très utile je pense :

`{
  printf 'touch ';
  sed -e 's/\\/\\\\/g' -e "s/'/\\\'/g" -e 's/"/\\"/g' -e 's/^/"/' -e 's/$/"/' fichier;
} | tr '\n' ' ' | sh -`

* * *

PS: MisterFreez, pour la solution avec awk, il faut rajouter une paire de guillemets comme j’ai fait dans le 6ème post
