Si quiero convertir pdf
a una png
imagen con imagemagick, hago algo como:
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
El archivo pdf a menudo tiene un nombre de archivo muy largo por algunas razones y quiero que el png
archivo tenga el mismo nombre, excepto la extensión.
Por lo general, selecciono this_is_a_very_long_filename_of_my_pdf_file.pdf
dos veces a través de la pestaña y zsh-menu
luego cambio pdf
a png
manualmente para el segundo argumento.
Sin embargo, ¿hay una manera más rápida de hacer esto?
command-line
zsh
imagemagick
estudiante
fuente
fuente
Esta llamada a mogrify creará un nuevo archivo png en lugar de sobrescribir el pdf, con suerte;)
para th * .pdf, use el número apropiado de caracteres para seleccionar el archivo correcto o completar la pestaña mejor hasta que tenga el nombre completo.
De esta manera, puede crear un alias para todo el comando hasta el parámetro png.
fuente
Si siempre usa el mismo comando con pequeñas variaciones (como el nombre del archivo), puede escribir una función:
(esta función es específica de
zsh
), y para cada archivo your_file.pdf que desea convertir:Nota 1: puede escribir el mismo tipo de función para otros shells, pero esto es un poco más complejo.
Nota 2: Con
zsh
, las comillas son útiles solo si laSH_WORD_SPLIT
opción está configurada (que no es la predeterminada).fuente
Considere usar variables para almacenar sus nombres de archivo. También se autocompletan:
Uso comillas porque a veces los espacios muerden.
Los beneficios significativos de esto son:
cat listOfFiles | while read f; do ... ; done
estructura de bucle.abc<tab>d<tab>x<tab>2<tab>
etc. De esta manera, solo tiene que escribirlo una vez, e incluso puede recoger el último archivo o el archivo más grande a través de un script comof=\
ls -t | cabeza -1 '', en lugar de ejecutar primero la búsqueda, buscar el nombre del archivo y transcribirlo como una especie de mono entrenado.fuente
También puede usar la expansión del historial para referirse a palabras en la línea de comando actual:
!#
refiere a la línea de comando escrita hasta ahora$
indica la última palabra (antes de la expansión)r
elimina la extensión del archivo. Esto también marca el final del texto, que se reemplaza cuando se produce la expansión del historial..png
Es la nueva extensión. Esto no pertenece a la expansión misma.Cuando se ejecuta esta línea,
!#:$:r
se reemplaza por el nombre de su archivo pdf menos la extensión, creando así el comando a partir de la pregunta:Esta línea se ejecuta directamente.
Si desea verificar el comando después de la expansión del historial, antes de la ejecución, use
Esto volverá a cargar la línea expandida en el búfer de edición en lugar de ejecutarla.
Nota: a diferencia de cualquier otra expansión, la expansión del historial se realiza antes de que el comando se guarde en el historial. Entonces
echo !#
aparecerá comoecho echo
y no comoecho !#
en tu$HISTFILE
.fuente
El uso de la expansión de llaves no puede ser mejor para este ejemplo especial. Sin embargo, un poco más flexible es el widget zle
copy-prev-shell-word
, que hace lo que su nombre sugiere y es útil si desea un argumento similar al anterior, que no puede derivarse sistemáticamente de él.Vincula el widget, por ejemplo, a
CTRL+W
:Si eres tan flojo como yo, usa esta secuencia de Bindkey
para obtener el siguiente comportamiento:
CTRL+W
inserta la palabra de shell anterior con un espacio en blanco inicial (por lo tanto, ¡guarda una pulsación de tecla!)CTRL+W CTRL+W
inserta la palabra de shell anterior directamentefuente