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 06/09/2022, à 19:55

RoiBurgonde

Script nautilus pour fusionner plusieurs fichiers pdf

Bonjour à tous,

J'ai trouvé un script nautilus afin de fusionner des pdf que je sélectionne dans un dossier :

#!/bin/bash
ifs=$IFS
IFS='\
'
PDFARGUMENTS=""
fpaths=`echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | sort`
for file in $fpaths
do
  if [ -f "$file" ]; then
  base=${file%.*}
	ext=${file##*.}
	if [ "$ext" == "pdf" ]; then
	    PDFARGUMENTS="$PDFARGUMENTS \"$file\""
	    #pdfdir=`dirname "$file"`
	fi
  fi
done

#szSavePath=$(zenity --file-selection --save --confirm-overwrite);echo "$szSavePath"

if [ -n "$PDFARGUMENTS" ]; then
#    eval pdftk "$PDFARGUMENTS" cat output "$szSavePath"
    eval pdftk "$PDFARGUMENTS" cat output "merge_result.pdf"
fi
IFS=$ifs

Seulement je n'arrive pas à obtenir le fichier fusionné dans le dossier initial des fichiers.
Je m'explique, si les fichiers que je veux fusionner se trouvent dans Documents/dossier1/dossier2/dossier3, le résultat de la fusion arrive dans Documents et pas dans Documents/.../dossier3.
J'ai bien compris qu'en jouant avec les "#" je pouvais utiliser zenity pour choisir le dossier de destination mais je ne veux pas utiliser cette option. J'aimerais que la fusion s'effectue directement dans le sous dossier d'origine.
Je ne suis pas fortiche en codage donc j'ai besoin d'un peu d'aide, d'autant que je pressens qu'il n'y a pas grand chose à modifier...

Je vous remercie d'avance de l'aide apportée!

Hors ligne

#2 Le 07/09/2022, à 05:50

MicP

Re : Script nautilus pour fusionner plusieurs fichiers pdf

Bonjour

Je n'ai pas de système ubuntu avec nautilus sous la main
donc je n'ai pas pu le tester, mais essaye avec ça :
le chemin du dernier fichier de la liste sera utilisé comme chemin pour le fichier merge_result.pdf

#!/bin/bash
ifs=$IFS
IFS='\
'
pdfdir=""
PDFARGUMENTS=""
fpaths=`echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | sort`
for file in $fpaths
do
  if [ -f "$file" ]; then
  base=${file%.*}
	ext=${file##*.}
	if [ "$ext" == "pdf" ]; then
	    PDFARGUMENTS="$PDFARGUMENTS \"$file\""
	    pdfdir=`dirname "$file"`
	fi
  fi
done

#szSavePath=$(zenity --file-selection --save --confirm-overwrite);echo "$szSavePath"

if [ -n "$PDFARGUMENTS" ]; then
#    eval pdftk "$PDFARGUMENTS" cat output "$szSavePath"
    eval pdftk "$PDFARGUMENTS" cat output "$pdfdir/merge_result.pdf"
fi
IFS=$ifs

Hors ligne

#3 Le 07/09/2022, à 08:08

Watael

Re : Script nautilus pour fusionner plusieurs fichiers pdf

salut,

- l'IFS est assigné à rien, parce que l'anti-slash inhibe le saut de ligne, mais de toutes façons, il est préférable de ne pas modifier cette variable globalement.
- l'initialisation de variables vides ne sert à rien si une description ne leur est pas ajoutée.
- les noms de variables tout en majuscules sont reservés aux variables d'environnement système; les variables utilisateurs peuvent être panachées (minuscules et majuscules).
- $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS est déjà trié; fpaths ne sert donc à rien.
- il vaut mieux utiliser la variable NAUTILUS_SCRIPT_SELECTED_URIS, parce que les noms de fichiers peuvent contenir des sauts de lignes...

pdfArgs+="${file:+"$file "}"
pdfDir=${file%/*}

Dernière modification par Watael (Le 07/09/2022, à 08:09)


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

En ligne

#4 Le 07/09/2022, à 08:58

MicP

Re : Script nautilus pour fusionner plusieurs fichiers pdf

Oui, j'aurais dû m'abstenir de faire une proposition tellement tout ça semblait incohérent,
et n'utiisant pas nautilus, dans le doute, j'ai préféré laisser tel quel ce qui avait déjà été fait
étant donné que je ne pouvais pas savoir ce qu'il fallait garder ou proposer comme solution.

Désolé.

Dernière modification par MicP (Le 07/09/2022, à 08:58)

Hors ligne

#5 Le 07/09/2022, à 10:48

RoiBurgonde

Re : Script nautilus pour fusionner plusieurs fichiers pdf

Watael a écrit :

salut,

- l'IFS est assigné à rien, parce que l'anti-slash inhibe le saut de ligne, mais de toutes façons, il est préférable de ne pas modifier cette variable globalement.
- l'initialisation de variables vides ne sert à rien si une description ne leur est pas ajoutée.
- les noms de variables tout en majuscules sont reservés aux variables d'environnement système; les variables utilisateurs peuvent être panachées (minuscules et majuscules).
- $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS est déjà trié; fpaths ne sert donc à rien.
- il vaut mieux utiliser la variable NAUTILUS_SCRIPT_SELECTED_URIS, parce que les noms de fichiers peuvent contenir des sauts de lignes...

pdfArgs+="${file:+"$file "}"
pdfDir=${file%/*}

Vous semblez bien vous y connaître alors que moi pas du tout sad
Pourriez-vous me proposer une version modifiée du script? J'ai essayé de suivre ce que vous avez écrit mais franchement je dois louper quelque chose...

Merci d'avance.

Hors ligne

#6 Le 07/09/2022, à 13:00

Watael

Re : Script nautilus pour fusionner plusieurs fichiers pdf

#!/bin/bash

for f in $NAUTILUS_SCRIPT_SELECTED_URIS
do
    files+=( "$(printf '%b' "${f//%/\\x}" )" )
done
files=( "${files[@]##*://}" )

pdftk "${files[@]}" cat output "${files[0]%/*}/merge_result.pdf"

Dernière modification par Watael (Le 07/09/2022, à 13:02)


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

En ligne

#7 Le 07/09/2022, à 13:04

RoiBurgonde

Re : Script nautilus pour fusionner plusieurs fichiers pdf

@Watael

Je vous remercie infiniment! Ça fonctionne parfaitement !!! smile

Belle journée à vous!

Hors ligne