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 25/09/2017, à 20:27

HPIR40

[Resolu] Gestion d'un fichier pour traitement ultérieur

Bonjour

Je rencontre un soucis pour un script et là j'avoue je calle, si vous avez une solution je suis preneur.

Voici la situation:

Pour le moment à la fin de la prog j'ai un fichier sous ce type de format

option1 /directory1/directory2/directory3/directory4
option2 /directory1/directory2/directory5/directory6/directory7
option3 /directory1/directory2/directory5/directory6/directory7/directory9/file10

Le but est, en traitant automatiquement ce fichier, d'éliminer à la fois date2 /directory1/directory2/directory5/directory6/directory7 et date3 /directory1/directory2/directory5/directory6/directory7/directory9/file10 qu'ils ont en commun /directory1/directory2/directory5/directory6/directory7. mais bien entendu /directory1/directory2/directory5/directory6/directory7 peut varier suivant le traitement en amont.

J'ai essayé avec sort/uniq mais rien à faire ou alors il me supprime une des lignes mais pas les deux.

Autre solution c'est de partir d'un fichierA avec date3 /directory1/directory2/directory5/directory6/directory7/directory9/file10, de supprimer de fichierB la ligne date2 /directory1/directory2/directory5/directory6/directory7 puisque elles ont /directory1/directory2/directory5/directory6/directory7 en commun

Je sais c'est un peu tordu, mais pour un cerveau humain c'est facile à faire donc il doit bien y avoir un moyen de le traiter automatiquement.

Mais la je ne vois pas du tout comment faire et d'ailleurs je ne sais même si ce type de traitement est possible.

Merci pour vos lumières

Dernière modification par HPIR40 (Le 28/09/2017, à 09:31)

Hors ligne

#2 Le 25/09/2017, à 21:18

Watael

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

[...] pour un cerveau humain c'est facile à faire donc il doit bien y avoir un moyen de le traiter automatiquement.

heu, pas pour le mien sad

pourquoi ne pas tout supprimer puisqu'ils ont tous en commun "/dir1/dir2" ?

il faut développer le raisonnement sous-jacent.

Dernière modification par Watael (Le 25/09/2017, à 21:21)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 25/09/2017, à 21:22

pingouinux

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

Bonsoir,

HPIR40 a écrit :

Pour le moment à la fin de la prog j'ai un fichier sous ce type de format

Autre solution c'est de partir d'un fichierA avec ....., de supprimer de fichierB la ligne .....

Ta demande ne me paraît pas claire. Au départ, tu as un seul fichier, ou deux ? Quel résultat veux-tu obtenir ?

Merci d'utiliser les balises-code <> pour montrer les fichiers ou les résultats de commandes.

Hors ligne

#4 Le 26/09/2017, à 10:50

HPIR40

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

Bon je vais être un peu plus clair

j'ai un montage disque reseau sous cette forme:

/data/projet1/
/data/projet2/
/data/projet3/
etc....

chaque projet contient des sous dossiers standard donc sur un ls -l je vais avoir:

/data/projet1/01-administratif
/data/projet1/02-commercial
/data/projet1/03-realisation
/data/projet1/04-documents_divers
/data/projet2/01-administratif
/data/projet2/02-commercial
/data/projet2/03-realisation
/data/projet2/04-documents_divers
/data/projet3/01-administratif
/data/projet3/02-commercial
/data/projet3/03-realisation
/data/projet3/04-documents_divers
etc...

le but pour moi est de vérifier que le document reunion. a bien été créé et sauvegardé dans chaque sous répertoires 04-documents_divers de chaque projet et donc en finalité de lister les projets ou ce fichier n'a pas été créé.

Je fais donc une premiere recherche de ce fichier docx via la commande find et par exemple il me sors bien:

/data/projet3/04-documents_divers/planning.docx

cela veut dire que projet 1 et projet 2 n'ont pas ce fameux fichier docx, c'est donc c'est cette fameuse info que je veux sortir.

donc ce que je pensais faire, c'est simplement lister les projets pour sortir un fichier de ce type la (je n'ai pas besoin d'aller plus loin dans l'arborescence):

/data/projet1/
/data/projet2/
/data/projet3/

et sortir un fichier final amputé de /data/project3/ car il contient le fameux fichier docx.

pour avoir à la fin un listing de ce type par exemple

/data/projet1/
/data/projet2/

c'est sur cette dernière phase que je bute.

merci pour votre aide

Dernière modification par HPIR40 (Le 26/09/2017, à 11:14)

Hors ligne

#5 Le 26/09/2017, à 11:29

pingouinux

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

Tu peux essayer ceci :

grep -vf <(cut -d/ -f1-3 <(find /data/projet* -name \*.docx)) fichier_contenant_la_liste_des_repertoires | cut -d/ -f1-3 | sort -u

Hors ligne

#6 Le 26/09/2017, à 16:54

HPIR40

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

merci

je vais essayer ça demain, la je suis un peu charette sur autre chose.

Hors ligne

#7 Le 26/09/2017, à 17:49

Watael

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

salut,

trouvé en STFW :

 find "$srcDir" -mindepth 1 -type d ! -exec test -f {}/"$filename" \; -print

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 26/09/2017, à 18:47

HPIR40

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

Watael a écrit :

salut,

trouvé en STFW :

 find "$srcDir" -mindepth 1 -type d ! -exec test -f {}/"$filename" \; -print

ca peut être pas mal aussi mais quid des variables?

srcDir=/data/projet*
et
filename=*.docx

c'est bien ça ?

Par contre test c'est quoi? c'est mon fichier listant les directory?

Dernière modification par HPIR40 (Le 26/09/2017, à 18:48)

Hors ligne

#9 Le 26/09/2017, à 21:06

Watael

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

test est une commande shell.
test -f teste si l'argument est un fichier régulier.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 26/09/2017, à 21:35

HPIR40

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

ok je ne connaissais pas cette commande. merci

Hors ligne

#11 Le 27/09/2017, à 10:17

HPIR40

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

Watael a écrit :

salut,

trouvé en STFW :

 find "$srcDir" -mindepth 1 -type d ! -exec test -f {}/"$filename" \; -print

Bonjour

Bon cette commande ne fonctionne pas car il continue malgré tout a me lister le fameux fichier doc

d'ailleurs j'ai modifié la commande comme suit:

find "$srcDir" -maxdepth 1 -type d ! -exec test -f {}/"$filename" \; -print

pour avoir uniquement le listing des directory, mais quoi qu'il en soit il ne m'exclus pas la directory contenant le fichier planning.docx

concernant la variable $filename je l'ai écrite comme suit pour élargir au mieux la recherche

filename=*lanning*.docx

Et rien a faire la directory est toujours la car en effet il y a d'autres fichiers qui eux aussi sont listés donc la directory a quand même une raison d'être listé.

Il faudrait réussir à l'exclure quoi qu'il arrive du moment qu'elle contient ce fameux fichier docx

Dernière modification par HPIR40 (Le 27/09/2017, à 16:04)

Hors ligne

#12 Le 27/09/2017, à 10:20

HPIR40

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

pingouinux a écrit :

Tu peux essayer ceci :

grep -vf <(cut -d/ -f1-3 <(find /data/projet* -name \*.docx)) fichier_contenant_la_liste_des_repertoires | cut -d/ -f1-3 | sort -u

Je viens d'essayer cette commande

elle me sort: sh: syntax error near unexpected token `('

pourtant tout me semble ok et pour le fichier_contenant_la_liste_des_repertoires j'ai indiqué le chemin complet.

Hors ligne

#13 Le 27/09/2017, à 10:22

pingouinux

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

@HPIR40 #12 : Il faut lancer la commande en bash, et non en sh

Hors ligne

#14 Le 27/09/2017, à 10:59

HPIR40

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

en bash ca va mieux en effet  wink

mais toujours pas le résultat recherché

comme le chemin est plus long que sur les exemples que j'ai donné j'ai bien sur mis le chemin tel qu'il est en realité et surtout remplacé

cut -d/ -f1-3
par
cut -d/ -f1-8

mais je me retrouve avec des dossiers qui sont listés 3 fois alors qu'il ne l'étaient que une fois avant et mon dossier a supprimer qui est listé 2 fois

voila la commande complète que j'ai entré (vrai nom des directory changé bien sur)

grep -vf <(cut -d/ -f1-8 <(find /volumex/data/directory/directory/directory/dossier_de_travail* -name \*lanning*.docx)) /volumey/home/admin/directory_list | cut -d/ -f1-8 | sort -u

Hors ligne

#15 Le 27/09/2017, à 11:55

pingouinux

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

Peux-tu montrer quelques lignes du résultat de cette commande

find /volumex/data/directory/directory/directory/dossier_de_travail* -name \*lanning\*.docx

et le résultat de celle-ci

head /volumey/home/admin/directory_list

Ajouté :
Il me semble quil faut mettre

cut -d/ -f1-7

Dernière modification par pingouinux (Le 27/09/2017, à 12:21)

Hors ligne

#16 Le 27/09/2017, à 15:25

HPIR40

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

il faut bien un

cut -d/ -f1-8

alors j'ai une recherche a faire dans 3 dossiers voici les retours:

# find /volumex/data/directory/directory/directory/dossier_de_travail1/* -name \*lanning*\*.docx
il ne trouve rien c'est normal
# /volumex/data/directory/directory/directory/dossier_de_travail2/* -name \*lanning*\*.docx
/volumex/data/directory/directory/directory/dossier_de_travail2/affaire100/01-Documents/pour test admin-planning.docx
/volumex/data/directory/directory/directory/dossier_de_travail2/affaire100/01-Documents/@eaDir/pour test admin-planning.docx (cette dernière ligne  c'est parce que je suis sur un NAS synology)
# find /volumex/data/directory/directory/directory/dossier_de_travail3/* -name \*lanning*\*.docx
il ne trouve rien c'est normal

dossier_de_travail1, 2 et 3 ne s'appellent pas comme cela en réalité, ce sont des noms sans aucun rapport l'un avec l'autre, d'où les 3 recherches séparées, je scripterai ensuite cela avec des variables quand ça fonctionnera.

et voila le head de directory_list (il est petit car je filtre par période lors de la création de ce dossier pour éviter de me retrouver avec mes 200 repertoires dedans)

/volumex/data/directory/directory/directory/dossier_de_travail1/affaire200
/volumex/data/directory/directory/directory/dossier_de_travail2/affaire101
/volumex/data/directory/directory/directory/dossier_de_travail2/affaire100

c'est donc bien /volumex/data/directory/directory/directory/dossier_de_travail2/affaire100 que je veux faire disparaitre de la liste par un traitement supplémentaire

pour finir voila le script final que je lance pour créer le dernier fichier

#!/bin/bash
grep -vf <(cut -d/ -f1-8 <(find /volumex/data/directory/directory/directory/dossier_de_travail1/*  -name \*lanning*\*.docx)) /volumey/home/admin/directory_list | cut -d/ -f1-8 | sort -u > /volumey/home/admin/directory_list_final
grep -vf <(cut -d/ -f1-8 <(find /volumex/data/directory/directory/directory/dossier_de_travail2/*  -name \*lanning*\*.docx)) /volumey/home/admin/directory_list | cut -d/ -f1-8 | sort -u >> /volumey/home/admin/directory_list_final
grep -vf <(cut -d/ -f1-8 <(find /volumex/data/directory/directory/directory/dossier_de_travail3/*  -name \*lanning*\*.docx)) /volumey/home/admin/directory_list | cut -d/ -f1-8 | sort -u >> /volumey/home/admin/directory_list_final

et voila le head de directory_list_final ou il pète les plombs

/volumex/data/directory/directory/directory/dossier_de_travail1/affaire200
/volumex/data/directory/directory/directory/dossier_de_travail2/affaire101
/volumex/data/directory/directory/directory/dossier_de_travail2/affaire100
/volumex/data/directory/directory/directory/dossier_de_travail1/affaire200
/volumex/data/directory/directory/directory/dossier_de_travail2/affaire101
/volumex/data/directory/directory/directory/dossier_de_travail1/affaire200
/volumex/data/directory/directory/directory/dossier_de_travail2/affaire101
/volumex/data/directory/directory/directory/dossier_de_travail2/affaire100

Dernière modification par HPIR40 (Le 27/09/2017, à 16:00)

Hors ligne

#17 Le 27/09/2017, à 16:40

pingouinux

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

Si tu le fais en plusieurs commandes, ça ne risque pas de marcher.

Essaye ceci :

#!/bin/bash
grep -vf <(cut -d/ -f1-8 <(find /volumex/data/directory/directory/directory/dossier_de_travail[1-3] -name \*lanning*\*.docx)) /volumey/home/admin/directory_list | cut -d/ -f1-8 | sort -u > /volumey/home/admin/directory_list_final

Ou bien en passant par un fichier intermédiaire :

#!/bin/bash
(
find /volumex/data/directory/directory/directory/dossier_de_travail1 -name \*lanning*\*.docx
find /volumex/data/directory/directory/directory/dossier_de_travail2 -name \*lanning*\*.docx
find /volumex/data/directory/directory/directory/dossier_de_travail3 -name \*lanning*\*.docx
) >/volumey/home/admin/mes_fichiers

grep -vf <(cut -d/ -f1-8 /volumey/home/admin/mes_fichiers) /volumey/home/admin/directory_list | cut -d/ -f1-8 | sort -u > /volumey/home/admin/directory_list_final

Hors ligne

#18 Le 27/09/2017, à 18:43

HPIR40

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

merci, je regarde ça demain matin

Hors ligne

#19 Le 28/09/2017, à 09:31

HPIR40

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

Bonjour

Je viens de tester le script final, c'est nickel il fonctionne parfaitement

Merci beaucoup pour ton aide

Hors ligne

#20 Le 29/09/2017, à 08:16

serged

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

HPIR40 a écrit :

ok je ne connaissais pas cette commande. merci

D'où l'erreur de débutant, qui est de nommer un script (ou un exécutable) "test"  et de s'étonner qu'il ne fait pas ce qu'il voulait ! big_smile


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#21 Le 29/09/2017, à 10:15

moko138

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

[HS]

bibi a écrit :

Je me suis fait tromper par ma pipière.

HPIR40 a écrit :

c'est sur cette dernière phase que je bute.

Essaie encore...
                              [/HS]


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#22 Le 29/09/2017, à 15:13

Watael

Re : [Resolu] Gestion d'un fichier pour traitement ultérieur

en allant plus loin qu'un simple test

find "$srcDir" -mindepth 1 -type d \( -exec sh -c 'for f in "$1"/*; do if test -f "$f"; then if test "$f" = "$1/$2"; then exit 1; fi; fi; done' sh "{}" "$filename" \; -a -print \)

ça semble fonctionner...

Dernière modification par Watael (Le 29/09/2017, à 15:22)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne