Blocage sur un script shell

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

Bonjour,

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

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.

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

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+