Si je veux convertir un pdf
en png
image avec imagemagick, je fais quelque chose comme:
convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf this_is_a_very_long_filename_of_my_pdf_file.png
Le fichier pdf a souvent un nom de fichier très long pour certaines raisons et je veux que le png
fichier ait le même nom sauf l'extension.
En général , je choisis this_is_a_very_long_filename_of_my_pdf_file.pdf
deux fois par onglet et zsh-menu
et puis changer pdf
à la png
main pour le second argument.
Cependant, existe-t-il un moyen plus rapide de le faire?
command-line
zsh
imagemagick
étudiant
la source
la source
Cet appel à mogrify créera un nouveau fichier png au lieu d'écraser le pdf - j'espère;)
pour th * .pdf, utilisez le nombre approprié de caractères pour sélectionner le bon fichier ou une meilleure tabulation jusqu'à ce que vous ayez le nom complet.
De cette façon, vous pouvez créer un alias pour la commande entière jusqu'au paramètre png.
la source
Si vous utilisez toujours la même commande avec de petites variations (comme le nom du fichier), vous pouvez écrire une fonction:
(cette fonction est spécifique à
zsh
), et pour chaque fichier your_file.pdf que vous souhaitez convertir:Remarque 1: vous pouvez écrire le même type de fonction pour d'autres shells, mais c'est un peu plus complexe.
Remarque 2: Avec
zsh
, les guillemets ne sont utiles que si l'SH_WORD_SPLIT
option est définie (ce qui n'est pas la valeur par défaut).la source
Pensez à utiliser des variables pour stocker vos noms de fichiers. Ils remplissent également automatiquement:
J'utilise des guillemets car parfois les espaces mordent.
Les avantages significatifs de ceci sont:
cat listOfFiles | while read f; do ... ; done
structure en boucle.abc<tab>d<tab>x<tab>2<tab>
etc. De cette façon, vous n'avez qu'à le taper une fois, et vous pouvez même récupérer le dernier fichier ou le plus gros fichier via un script commef=\
ls -t | head -1 '', au lieu d'exécuter d'abord la recherche, de rechercher le nom de fichier et de le transcrire comme une sorte de singe entraîné.la source
Vous pouvez également utiliser l' historique pour faire référence aux mots de la ligne de commande actuelle:
!#
fait référence à la ligne de commande tapée jusqu'à présent$
indique le dernier mot (avant l'extension)r
supprime l'extension du fichier. Cela marque également la fin du texte, qui est remplacé lorsque l'expansion de l'historique se produit..png
est la nouvelle extension. Cela n'appartient pas à l'expansion elle-même.Lorsque cette ligne est exécutée,
!#:$:r
est remplacée par le nom de votre fichier pdf moins l'extension, créant ainsi la commande à partir de la question:Cette ligne est alors directement exécutée.
Si vous souhaitez vérifier la commande après l'expansion de l'historique, avant l'exécution, utilisez
Cela rechargera la ligne développée dans le tampon d'édition au lieu de l'exécuter.
Remarque: contrairement à toute autre extension, l'expansion de l'historique est effectuée avant l'enregistrement de la commande dans l'historique. Ainsi
echo !#
apparaîtra commeecho echo
et non commeecho !#
dans votre$HISTFILE
.la source
L'utilisation de l'accolade ne peut pas être battue pour cet exemple spécial. Cependant, un peu plus flexible est le widget zle
copy-prev-shell-word
, qui fait ce que son nom suggère et est pratique si vous voulez un argument similaire au précédent, qui ne peut pas systématiquement en dériver.Liez le widget par exemple à
CTRL+W
:Si vous êtes aussi paresseux que moi, utilisez cette séquence de touches
pour obtenir le comportement suivant:
CTRL+W
insère le mot de shell précédent avec un blanc de début (par conséquent, vous enregistrez une frappe!)CTRL+W CTRL+W
insère directement le mot shell précédentla source