Если я хочу преобразовать изображение pdf
в png
изображение с помощью imagemagick, я делаю что-то вроде:
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
У файла pdf часто есть очень длинное имя файла по некоторым причинам, и я хочу, чтобы у png
файла было то же имя за исключением расширения.
Обычно я выбираю this_is_a_very_long_filename_of_my_pdf_file.pdf
два раза через вкладку и zsh-menu
и изменить то , pdf
чтобы png
вручную для второго аргумента.
Однако есть ли более быстрый способ сделать это?
command-line
zsh
imagemagick
ученик
источник
источник
Этот вызов mogrify создаст новый png-файл вместо перезаписи pdf - надеюсь;)
для th * .pdf используйте соответствующее количество символов, чтобы выбрать правильный файл или лучше завершить вкладку, пока у вас не будет полное имя.
Таким образом, вы можете создать псевдоним для всей команды вплоть до параметра png.
источник
Если вы всегда используете одну и ту же команду с небольшими вариациями (например, имя файла), вы можете написать функцию:
(эта функция специфична для
zsh
), и для каждого файла your_file.pdf вы хотите преобразовать:Примечание 1: Вы можете написать такую же функцию для других оболочек, но это немного сложнее.
Примечание 2: с
zsh
, кавычки полезны, только если установленSH_WORD_SPLIT
параметр (который не по умолчанию).источник
Попробуйте использовать переменные для хранения ваших имен файлов. Они автозаполнения тоже:
Я использую кавычки, потому что иногда пробелы кусаются.
Существенными преимуществами этого являются:
cat listOfFiles | while read f; do ... ; done
структуру цикла.abc<tab>d<tab>x<tab>2<tab>
и т. Д. Таким образом, вам нужно всего лишь набрать его один раз, и вы даже можете выбрать самый последний файл или самый большой файл через скрипт типаf=\
ls -t | head -1`` вместо того, чтобы сначала запустить поиск, отыскивая имя файла и расшифровывая его, как некую обученную обезьяну.источник
Вы также можете использовать расширение истории, чтобы ссылаться на слова в текущей командной строке:
!#
относится к командной строке, набранной до сих пор$
указывает на последнее слово (перед расширением)r
удаляет расширение файла. Это также отмечает конец текста, который заменяется, когда происходит расширение истории..png
это новое расширение. Это не относится к самому расширению.Когда эта строка запускается,
!#:$:r
она заменяется именем вашего pdf-файла за вычетом расширения, создавая команду из вопроса:Эта строка затем выполняется напрямую.
Если вы хотите проверить команду после раскрытия истории, перед выполнением используйте
Это перезагрузит расширенную строку в буфер редактирования вместо ее выполнения.
Примечание. В отличие от любого другого расширения, расширение истории выполняется до сохранения команды в истории. Так
echo !#
будет выглядеть какecho echo
и не так какecho !#
по вашему$HISTFILE
.источник
Использование расширения скобки не может быть побеждено для этого специального примера. Однако, немного более гибкий виджет zle
copy-prev-shell-word
, который делает то, что предлагает его название, и удобен, если вы хотите подобный аргумент, предыдущему, который не может быть систематически получен из него.Привязать виджет, например
CTRL+W
:Если вы так же ленивы, как и я, используйте эту последовательность клавиш
чтобы получить следующее поведение:
CTRL+W
вставляет предыдущее слово оболочки с пробелом в начале (следовательно, вы сохраняете одно нажатие клавиши!)CTRL+W CTRL+W
вставляет предыдущее слово оболочки напрямуюисточник