Вопрос или проблема
с помощью следующей команды, которую я превратил в алиас, я хотел бы открывать pdf-файлы из своего терминала.
alias pdfLoad=”fd . ‘$HOME/OneDrive/DBCalibre’ -t f -e pdf | fzf | xargs -0 -I {} masterpdfeditor5 {}”
Однако я заметил проблему, вызванную определёнными символами, такими как ‘, которые не позволяют мне открыть файл.
OS: Arch Linux x86_64
Kernel: 6.12.4-arch1-1
Shell: zsh 5.9
DE: GNOME 47.2
fzf 0.56.3 (add1aec6)
fd 10.2.0
masterpdfeditor5 Build 5.9.86, 64 bit
Я не знаком с fd
, fzf
или masterpdfeditor5
, но могу по крайней мере сказать, что команда xargs
не будет работать, потому что вы используете -0
для записей, разделённых NUL, в то время как передаете ей записи, разделённые LF…
Простое решение (и, скорее всего, лучшее, когда дело касается путей) — использовать записи, разделённые NUL, во всех командах конвейера:
fd . ~/OneDrive/DBCalibre -t f -e pdf -0 |
fzf --read0 --print0 |
xargs -0 -n1 masterpdfeditor5
.
Ответ или решение
Открытие PDF-файлов через терминал с использованием fzf и fd на Arch Linux
В современных операционных системах Linux работа с файлами через командную строку становится все более распространенной. В вашем случае, задача заключается в том, чтобы открыть PDF-файлы из терминала, используя такие инструменты, как fd
и fzf
. Однако вы столкнулись с проблемами, связанными с определенными символами в именах файлов, и с неправильным использованием xargs
.
Проблема с пространством имен файлов
Ваш первоначальный алиас использовал следующую команду:
alias pdfLoad="fd . '$HOME/OneDrive/DBCalibre' -t f -e pdf | fzf | xargs -0 -I {} masterpdfeditor5 {}"
Основной проблемой здесь является использование неверных символов. Символы, такие как одинарные кавычки, могут быть неправильно интерпретированы при передаче аргументов, что приводит к сбоям в открытии файлов. Также, как вы правильно заметили, xargs
был настроен с опцией -0
, но команда fd
подавала пути, разделенные символом новой строки (LF).
Рекомендованное решение
Для исправления этой проблемы рекомендуется использовать нулевой разделитель (NUL
) везде в конвейере. Это гарантирует, что имена файлов, содержащие пробелы или специальные символы, будут корректно обработаны. Вот исправленная версия вашего алиаса:
alias pdfLoad="fd . ~/OneDrive/DBCalibre -t f -e pdf -0 | fzf --read0 --print0 | xargs -0 -n1 masterpdfeditor5"
Подробный разбор команд
1. fd
fd
— это удобная утилита для поиска файлов, которая предлагает более быстрое и простое использование по сравнению с find
. В данном случае команда fd . ~/OneDrive/DBCalibre -t f -e pdf -0
выполняет следующее:
.
указывает на текущее местоположение (или корень поиска).~/OneDrive/DBCalibre
— путь к директории, где будут искаться PDF-файлы.-t f
указывает на то, что следует искать только файлы.-e pdf
ограничивает результаты поиска только PDF-файлами.-0
выводит результаты с нулевым разделителем, что позволяет безопасно обрабатывать имена файлов, содержащие пробелы или специальные символы.
2. fzf
fzf
— это инструмент для интерактивного поиска. Использование fzf --read0 --print0
позволяет:
--read0
принимать вход, разделенный нулем для корректной обработки имен файлов.--print0
выводить результаты также с нулевым разделителем, что гарантирует совместимость с именами файлов, содержащими пробелы и специальные символы.
3. xargs
xargs
используется для передачи аргументов в другие команды. В этом случае, команда xargs -0 -n1 masterpdfeditor5
делает следующее:
-0
ожидает вход с нулевым разделителем.-n1
указывает, что каждый аргумент должен передаваться вmasterpdfeditor5
по одному.
Заключение
Используя предложенный подход с нулевыми разделителями, вы сможете без проблем открывать PDF-файлы даже если их имена содержат пробелы или специальные символы. Это улучшит вашу рабочую эффективность и сделает использование командной строки более удобным.
С тех пор как вы внедрили fzf
и fd
для работы с файлами, вы можете дополнительно изучить их документацию, чтобы оптимизировать и расширить свои ведения по работе с файлами в терминале.