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 09/07/2017, à 15:59

bergeronnette

[résolu] Chercher un fichier, récupérer le nom en variable pour script

Bonjour,

J'essaye d'adapter cette ligne de code trouvée https://stackoverflow.com/questions/156 … ing-nicely

find www -name '*.html' -type f -exec sh -c 'echo $(basename {})' \;   # SQ

en

listeCSV=$(find `pwd` -name '*.csv' $(basename {}))

pour l'inscrire dans un script qui est ici https://forum.ubuntu-fr.org/viewtopic.php?id=2008197 et que je souhaite modifier. Je cherche à ne pas rentrer le nom du fichier csv en arguments quand je lance le script.

#!/bin/bash
pdfFile=$1
#listeCSV=$2
#listeCSV=$(find `pwd` -name "*.csv")
listeCSV=$(find `pwd` -name '*.csv' $(basename {}))

#Création du dossier des pdfuniques
if test -d `pwd`/pdfuniques
then rm -Rf `pwd`/pdfuniques
 fi
mkdir `pwd`/pdfuniques

numberOfPages=$(pdftk "$pdfFile" dump_data output | grep NumberOfPages| awk '{print $2}')

numberOfRows=$(awk 'END {print NR}' $listeCSV)

pas=$((numberOfPages/(numberOfRows -1)))
limite=$((numberOfRows -1))

for i in $(seq 1 $limite)
   do 
      ligne=1+$i       
      fileName=$(awk -F, 'NR == '$ligne' {print $4 $2 $3}' $listeCSV)
     pdftk "$pdfFile" cat $((1+(i-1)*pas)) $((i*pas)) output `pwd`/pdfuniques/"$fileName".pdf
done

Dernière modification par bergeronnette (Le 09/07/2017, à 18:31)

Hors ligne

#2 Le 09/07/2017, à 17:23

Hizoka

Re : [résolu] Chercher un fichier, récupérer le nom en variable pour script

Salut,
pourquoi utiliser `pwd` à de nombreuses reprises ?
il est plus simple d'utiliser une variable, c'est plus propre et simple à gerer, surtout quand cette fameuse variable existe déjà : ${PWD}

Il faut encadrer les variables avec des ", ça évite bon nombre de probleme, de même qu'il est plus propre d'utiliser des {} autour : "${variable}"

Inutile d'appeler seq, autant utiliser ce que propose bash : for ((i=1; i<=${limite}; i++))

Attention à ligne=1+$i, ça ne fait pas de calcul (si c'est ce que tu voulais faire)

Mais vis à vis de ta question, voici une des nombreuses possibilités :

find "${PWD}" -name "*.csv" -printf '%f\n'

Attention, name est sensible à la casse contrairement à iname.

Attention aussi au fait que find va chercher dans tous les sous dossiers et que ça peut être long, donc hesite pas à utiliser maxdepth si tu sais ou se trouve le fichier.

Dernière modification par Hizoka (Le 09/07/2017, à 17:29)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 09/07/2017, à 18:28

bergeronnette

Re : [résolu] Chercher un fichier, récupérer le nom en variable pour script

Bonjour,

merci pour ces précisions.

pourquoi utiliser `pwd` à de nombreuses reprises ?
il est plus simple d'utiliser une variable, c'est plus propre et simple à gerer, surtout quand cette fameuse variable existe déjà : ${PWD}

Je ne connais aucun langage informatique donc j'utilise ce que je trouve sur le net en cherchant au mieux les mots clés.
Je suis toujours à la recherche d'une référence bibliographique, type LaTex pour l'impatient  (une explication des commandes suivi d'un exemple).

Inutile d'appeler seq, autant utiliser ce que propose bash : for ((i=1; i<=${limite}; i++))

J'utilise les solutions proposées dans le premier post dont le lien est indiqué.

Attention à ligne=1+$i, ça ne fait pas de calcul (si c'est ce que tu voulais faire)

Pourtant le résultat est là. Le fichier pdf  est coupé aux bonnes pages et renommé grâce aux colonnes 4,2 et 3 qui sont dans le fichier csv.

find "${PWD}" -name "*.csv" -printf '%f\n'

J'ai vu passer une commande similaire mais j'avais le chemin complet en réponse

Voici ce que j'ai fait avec vos conseils.

#!/bin/bash

#Recherche le fichier csv dans le dossier courant + sous-dossiers éventuels
# évite d'écrire en argument le nom du fichier csv
#idem avec pdf -> risque de problèmes avec plusieurs pdf -> trouver un filtre pour sélectionner
#awk '{print substr($variable,début chaîne,fin chaîne)}' 
#  -maxdepth 1 obligatoire car en cas de relancement du test tous les fichiers nominatifs pdf ont déjà été créés dans pdfuniqueS/

listeCSV=$(find "${PWD}" -maxdepth 1 -name "*.csv"  -printf '%f\n')
pdfFile=$(find "${PWD}"  -maxdepth 1 -name  "*.pdf" -printf '%f\n')

#Création du dossier des pdfuniques
# "${PWD}" au lieu de `pwd`
if test -d "${PWD}"/pdfuniques
then rm -Rf "${PWD}"/pdfuniques
 fi
mkdir "${PWD}"/pdfuniques

numberOfRows=$(awk 'END {print NR}' "${listeCSV}")

pas=$((numberOfPages/(numberOfRows -1)))
limite=$((numberOfRows -1))

#for i in $(seq 1 $limite)
for ((i=1; i<=${limite}; i++))
   do 
      ligne=1+$i       
      fileName=$(awk -F, 'NR == '$ligne' {print $4 $2 $3}' "${listeCSV}")
      pdftk "${pdfFile}" cat $((1+(i-1)*pas)) $((i*pas)) output "${PWD}"/pdfuniques/"${fileName}".pdf
done

Merci

Hors ligne

#4 Le 09/07/2017, à 20:10

Hizoka

Re : [résolu] Chercher un fichier, récupérer le nom en variable pour script

Si tu veux découvrir le bash qui permet de faire beaucoup de choses : http://abs.traduc.org/abs-fr

De rien.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne