Se eu quiser converter um pdf
em uma png
imagem com imagemagick, faço 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
O arquivo pdf geralmente possui um nome de arquivo muito longo por alguns motivos e eu quero que o png
arquivo tenha o mesmo nome, exceto a extensão.
Normalmente eu seleciono this_is_a_very_long_filename_of_my_pdf_file.pdf
duas vezes via tab e zsh-menu
então mudo pdf
para png
manualmente para o segundo argumento.
No entanto, existe uma maneira mais rápida de fazer isso?
command-line
zsh
imagemagick
aluna
fonte
fonte
Esta chamada para mogrify criará um novo arquivo png em vez de sobrescrever o pdf - espero;)
para th * .pdf, use o número apropriado de caracteres para selecionar o arquivo correto ou o melhor preenchimento da guia até obter o nome completo.
Dessa forma, você pode criar um alias para todo o comando até o parâmetro png.
fonte
Se você sempre usar o mesmo comando com pequenas variações (como o nome do arquivo), poderá escrever uma função:
(essa função é específica para
zsh
) e para cada arquivo your_file.pdf que você deseja converter:Nota 1: Você pode escrever o mesmo tipo de função para outros shells, mas isso é um pouco mais complexo.
Nota 2: Com
zsh
, as aspas são úteis apenas se aSH_WORD_SPLIT
opção estiver definida (que não é o padrão).fonte
Considere usar variáveis para armazenar seus nomes de arquivos. Eles também são preenchidos automaticamente:
Uso aspas porque às vezes os espaços picam.
Os benefícios significativos disso são:
cat listOfFiles | while read f; do ... ; done
estrutura de loop.abc<tab>d<tab>x<tab>2<tab>
etc. Dessa forma, você só precisa digitá-lo uma vez e pode até escolher o arquivo mais recente ou o maior arquivo via um script comof=\
ls -t | head -1``, em vez de executar a pesquisa pela primeira vez, procurando o nome do arquivo e transcrevendo-o como uma espécie de macaco treinado.fonte
Você também pode usar a Expansão do histórico para se referir às palavras na linha de comando atual:
!#
refere-se à linha de comando digitada até o momento$
indica a última palavra (antes da expansão)r
remove a extensão do arquivo. Isso também marca o final do texto, que é substituído quando ocorre a expansão do histórico..png
é a nova extensão. Isso não pertence à própria expansão.Quando esta linha é executada,
!#:$:r
é substituída pelo nome do seu arquivo pdf menos a extensão, criando assim o comando a partir da pergunta:Essa linha é então executada diretamente.
Se você deseja verificar o comando após a expansão do histórico, antes da execução, use
Isso recarregará a linha expandida no buffer de edição, em vez de executá-lo.
Nota: Diferentemente de qualquer outra expansão, a expansão do histórico é executada antes que o comando seja salvo no histórico. Então
echo !#
, aparecerá comoecho echo
e não comoecho !#
no seu$HISTFILE
.fonte
O uso da expansão de chaves não pode ser derrotado neste exemplo especial. No entanto, um pouco mais flexível é o widget zle
copy-prev-shell-word
, que faz o que o nome sugere e é útil se você deseja um argumento semelhante ao anterior, que não pode derivar sistematicamente dele.Ligue o widget, por exemplo
CTRL+W
:Se você é tão preguiçoso quanto eu, use esta sequência de teclas de ligação
para obter o seguinte comportamento:
CTRL+W
insere a palavra shell anterior com um espaço em branco à esquerda (portanto, você salva um pressionamento de tecla!)CTRL+W CTRL+W
insere a palavra shell anterior diretamentefonte