Используя калибр из командной строки

Это может быть намного более просто. Я понятия не имею, с чем Вы - Тринг, чтобы сделать {print $folder}: фигурные скобки не имеют никакого смысла здесь, и при попытке включать $folder в строке Вы просто записали бы $folder. Вы не должны анализировать вывод ls, это очень редко полезно и часто перестало работать.

if ! ssh user@host "test -e '/usr/local/username/$folder'"; then
  # the file doesn't exist

Обратите внимание, что имя файла должно быть заключено в кавычки для удаленной оболочки. Я главным образом заботился об этом в своей команде выше путем окружения имени файла в удаленной команде с одинарными кавычками, но который только работает если $folder самостоятельно не содержит одинарных кавычек. Если Ваша локальная оболочка является ударом, ksh93 или zsh, используйте это вместо этого, для заключения в кавычки любой одинарной кавычки:

q=\'\\\'\'
if ! ssh user@host "[ -d '/usr/local/username/${folder//\'/$q}' ]"; then

Другой подход, который обычно более удобен, должен смонтировать удаленную файловую систему с sshfs и работой над ним через нормальный интерфейс файловой системы. Я рекомендую это, если Вы не работаете с большим количеством удаленных серверов одновременно.

mkdir /path/to/mount/point
sshfs user@host /path/to/mount/point
if ! [ -d "/usr/local/username/$folder" ]; then

2
21.11.2018, 00:27
2 ответа

Самый легкий путь, принимая все соответствующие файлы находится в том же каталоге:

for f in *; do ebook-meta "$f" --tags rhubarb

Если файлы могут быть в различных подкаталогах, использовать find (это предполагает, что единственные файлы во всех подкаталогах являются электронными книгами. Так как это вероятно не верное, необходимо использовать что-то дополнительное как -name "*.ebook" или безотносительно расширения Ваши электронные книги имеют):

find . -type f -exec ebook-meta '{}' --tags rhubarb \;
2
27.01.2020, 22:14
  • 1
    @ChrisDown argh, спасибо, забыл кавычки, которые были смыслом ответа. –  terdon♦ 01.09.2013, 17:32
  • 2
    ~/kindle-backup/34-wilbur-smith-Kindle-Collection] $ [9570]>; для f в *; сделайте электронная-книга-meta "$f" - отмечает wilbur-smith> ^C ~/kindle-backup/34-wilbur-smith-Kindle-Collection] $ [9570]>; для f в *; сделайте электронная-книга-meta "$f" - отмечает wilbur-smith>, ^C не работает, но я не вижу почему. Какие-либо идеи? –  boudiccas 01.09.2013, 18:11
  • 3
    находит. - исполнительная электронная-книга-meta типа f '{}' - отмечает wilbur-smith \; найдите: пути должны предшествовать выражению: исполнительное Использование: найдите [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [путь...] [выражение] –  boudiccas 01.09.2013, 18:12
  • 4
    Был '-', отсутствующий перед 'должностным лицом'. –  Dubu 01.09.2013, 20:14
  • 5
    @user205787 как Dubu указал, я забыл - прежде -exec, попробуйте еще раз с измененным ответом. –  terdon♦ 01.09.2013, 20:20

У Вас должны быть электронные книги автора в каталоге. cd к этому каталогу выполнение:

for var in $(ls); do ebook-meta $var --tags rhubarb; done

если имя файла имеет пробелы, необходимо изменить IFS (Внутренний Разделитель полей):

oldIFS=$IFS
IFS='\n'
for var in $(ls); do ebook-meta $var --tags rhubarb; done
IFS=$oldIFS

Или то же в единственной команде:

oldIFS=$IFS && IFS='\n' && for var in $(ls); do ebook-meta $var --tags rhubarb; done && IFS=$oldIFS

0
27.01.2020, 22:14
  • 1
    Спасибо за это, но не работа, это - часть puitput –  boudiccas 01.09.2013, 09:27
  • 2
    спасибо за это, но не работа, это - часть вывода - вывод является слишком длинным для здесь, но по paste.debian.net/33088. Я думаю, что существует некоторая проблема с самим 'cli.py' модулем изображение –  boudiccas 01.09.2013, 09:36
  • 3
    НИКОГДА не анализируйте ls, и дважды никогда не работая с именами файлов, которые, вероятно, будут иметь пробелы. –  terdon♦ 01.09.2013, 17:13

Теги

Похожие вопросы