# Blocage sur un script shell

**URL:** <https://www.debian-fr.org/t/blocage-sur-un-script-shell/74609>\
**Category:** Programmation\
**Created:** [Septembre 27, 2017, 2:38 UTC](https://www.debian-fr.org/t/blocage-sur-un-script-shell/74609 "2017-09-27T14:38:11Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Minus](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/8dc957/32.png) [@Minus](https://www.debian-fr.org/u/Minus)\
**Post date:** [Septembre 27, 2017, 2:38 UTC](https://www.debian-fr.org/t/blocage-sur-un-script-shell/74609/1 "2017-09-27T14:38:11Z")

</div>

Bonjour

Je dois réaliser un petit script, mais je bloque sur la partie finale depuis pas mal de temps et la franchement je ne voit pas comment m’en sortir.

Voila les détails:

But du script: chercher un fichier dans plusieurs répertoires et lister les repertoires n-2 ou ce fichier n’est pas présent.

Première phase, assez simple somme toute je cherche le fameux fichier dans 3 repertoires distincts que je liste dans un fichier sous un format assez clair (c’est simplement pour mon archivage)

```
find /volumeX/directory1/directory2/directory3/directory4/directorycible1/* -type f -newermt 2017-09-01 -iname "*union*.pdf" -exec ls -ltr {} \+ | awk '{ORS=" "; for(i=6;i<=NF;i++) print $i;print "\n"}' | sed -e "s/^ *//g" > /volumeX/home/admin/reunion1
find /volumeX/directory1/directory2/directory3/directory4/directorycible2/* -type f -newermt 2017-09-01 -iname "*union*.pdf" -exec ls -altr {} \+ | awk '{ORS=" "; for(i=6;i<=NF;i++) print $i;print "\n"}' | sed -e "s/^ *//g" >> /volumeX/home/admin/reunion1
find /volumeX/directory1/directory2/directory3/directory4/directorycible3/* -type f -newermt 2017-09-01 -iname "*union*.pdf" -exec ls -altr {} \+ | awk '{ORS=" "; for(i=6;i<=NF;i++) print $i;print "\n"}' | sed -e "s/^ *//g" >> /volumeX/home/admin/reunion1

```

A l’issu de cette recherche il me trouve bien le fichier test que j’ai mis en place

`Sep 7 14:35 /volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier100/01-Documents/pour test admin-reunion.pdf`

je liste ensuite tous les repertoires, la encore sur une période donnée, pour ne pas avoir un retour à rallonge

```
find /volumeX/directory1/directory2/directory3/directory4/directorycible1/* -maxdepth 0 -type d -newermt 2017-09-01 -exec ls -ld {} \+ | awk '{ORS=" "; for(i=6;i<=NF;i++) print $i;print "\n"}' | sed -e "s/^ *//g" > /volumeX/home/admin/reunion2
find /volumeX/directory1/directory2/directory3/directory4/directorycible2/* -maxdepth 0 -type d -newermt 2017-09-01 -exec ls -ld {} \+ | awk '{ORS=" "; for(i=6;i<=NF;i++) print $i;print "\n"}' | sed -e "s/^ *//g" >> /volumeX/home/admin/reunion2
find /volumeX/directory1/directory2/directory3/directory4/directorycible3/* -maxdepth 0 -type d -newermt 2017-09-01 -exec ls -ld {} \+ | awk '{ORS=" "; for(i=6;i<=NF;i++) print $i;print "\n"}' | sed -e "s/^ *//g" >> /volumeX/home/admin/reunion2

```

voici son retour

```
Sep 26 09:09 volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier 99
Sep 6 09:48 /volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier 101
Sep 11 10:27 /volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier100

```

ce que je voudrais ensuite, et c’est la ou je bloque, c’est obtenir un fichier sous cette forme

```
Sep 26 09:09 volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier 99
Sep 6 09:48 /volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier 101

```

c’est à dire amputé de la ligne complète contenant

`/volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier100`

puisque c’est le même répertoire que celui présent sur mon premier fichier qui a sorti

`Sep 7 14:35 /volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier100/01-Documents/pour test admin-reunion.pdf`

ou autre solution lier les deux fichiers générés:

```
Sep 26 09:09 volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier 99
Sep 6 09:48 /volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier 101
Sep 11 10:27 /volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier100
Sep 7 14:35 /volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier100/01-Documents/pour test admin-reunion.pdf

```

et supprimer automatiquement les deux lignes contenant /volumeX/directory1/directory2/directory3/directory4/directorycible2/dossier100 (ce que ne fait pas la commande -uniq malheureusement car il en garde toujours une)

j’ai essayé via une recherche inverse

`find /volumeX/directory1/directory2/directory3/directory4/directorycible2/* -maxdepth 0 -type f -newermt 2017-09-01 ! -iname "*union*.pdf" -exec ls -ltr {} \+ | awk '{ORS=" "; for(i=6;i<=NF;i++) print $i;print "\n"}' | sed -e "s/^ *//g" > /volumeX/home/admin/reuniontest`

Mais la il me sort tous les fichiers non pdf et dossiers de l’arborescence, c’est donc encore plus pénible et impossible à nettoyer.

J’espère avoir été assez clair.

Merci pour votre aide

---

<div class="post-metadata">

**Author:** ![jcsm33](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jcsm33/32/3832_2.png) [@jcsm33](https://www.debian-fr.org/u/jcsm33)\
**Post date:** [Septembre 27, 2017, 7:13 UTC](https://www.debian-fr.org/t/blocage-sur-un-script-shell/74609/2 "2017-09-27T19:13:54Z")

</div>

Bonjour,

C’est uniq qu’il faudrait inverser, non ?

---

<div class="post-metadata">

**Author:** ![Minus](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/8dc957/32.png) [@Minus](https://www.debian-fr.org/u/Minus)\
**Post date:** [Septembre 27, 2017, 9:07 UTC](https://www.debian-fr.org/t/blocage-sur-un-script-shell/74609/3 "2017-09-27T21:07:10Z")

</div>

ben si on inverse uniq (je ne sais pas si c’est possible), il va alors supprimer tous les fichiers présent une seule fois, et ce n’est pas ce que je veux.

---

<div class="post-metadata">

**Author:** ![jcsm33](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jcsm33/32/3832_2.png) [@jcsm33](https://www.debian-fr.org/u/jcsm33)\
**Post date:** [Septembre 28, 2017, 6:32 UTC](https://www.debian-fr.org/t/blocage-sur-un-script-shell/74609/4 "2017-09-28T06:32:43Z")

</div>

La commande `uniq -u` n’affiche que les lignes présentes une seule fois.

---

<div class="post-metadata">

**Author:** ![jelopo](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/96bed5/32.png) [@jelopo](https://www.debian-fr.org/u/jelopo)\
**Post date:** [Septembre 28, 2017, 8:16 UTC](https://www.debian-fr.org/t/blocage-sur-un-script-shell/74609/5 "2017-09-28T20:16:22Z")

</div>

Bonjour,

Pas sûr d’avoir bien compris ton problème, voici ce qu j’ai compris tu as un fichier et tu voudrais en résultat la contenu du fichier sauf la dernière ligne ? Si c’est ça voici une façon pas très élegante mais fonctionnelle.

```
$ cat toto
1
2
3
4
 
$ NB_LIGNES=`grep -c "$" toto`
4

$ let NB_AFFICHAGE=NB_LIGNES-1
$ head -n +$NB_AFFICHAGE toto
  1
  2
  3

```

A+
