#1 Le 09/07/2017, à 14: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, à 17:31)
Hors ligne
#2 Le 09/07/2017, à 16: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, à 16:29)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#3 Le 09/07/2017, à 17: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, à 19: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