Как к scp папкам с противными именами с помощью функции оболочки

Я избавился бы от grep и используйте awk:

find $path -type f -print0 | xargs -0 awk "/$pattern/{print FILENAME,FNR}"

Но использование grep и cut:

find $path -type f -print0 | xargs -0 grep -nH "$pattern" | cut -d: -f1,2

Включайте -type f пункт, таким образом, Вы не получаете ошибки, пытающиеся искать (или в grep или в awk) на нерегулярных типах файлов (символьные ссылки, каталоги, сокеты). Если Вы читаете из канала или сокета, когда другая программа, как предполагается, то Вы могли бы испортить ту программу.

find ... -print0 | xargs -0 обходит пробел наличия в именах файлов. Это не доступно в каждой системе UNIX, но находится на большинстве.

1
14.12.2012, 17:33
2 ответа

Вот рабочее решение:

function putOnSG() {
uuid=`uuidgen`
if [[ -d $1 ]]; then du -sh "$1";
scp -rv "$1" shiny:/Volumes/Seagate3To/\"$1\".$uuid
else echo $1 "is not a directory. Not copying.";
fi;
}

Единственными различиями с моей начальной буквой не рабочее решение являются обратные косые черты вокруг кавычек во втором аргументе scp.

1
27.01.2020, 23:54
  • 1
    Вы наткнулись на правильное решение. Особые условия с scp аргументы, они должны быть "дважды заключены в кавычки". Это вызвано тем, что scp аргумент, как любой нормальный аргумент оболочки, интерпретируется Вашей оболочкой. Однако однажды scp получает аргумент, он должен передать его удаленной оболочке на другой машине, и оболочка там интерпретирует его еще раз. Именно поэтому два слоя заключения в кавычки требуются (\ и "). –  jw013 14.12.2012, 17:37
  • 2
    я задал вопрос конкретно о scp и кавычках: unix.stackexchange.com/questions/58499/escaping-quotes-for-scp, если Вы хотите уточнить на предмет двойного заключения в кавычки, которое все еще не является очень четким для меня. –  alecail 14.12.2012, 17:44
  • 3
    Какая часть неясна? Я не уверен, что мог объяснить это немного лучше, чем, что я сказал в вышеупомянутом комментарии. Возможно, кто-то еще может объяснить это лучше. –  jw013 14.12.2012, 17:57
  • 4
    Часть, где Вы говорите, что удаленная оболочка интерпретирует аргумент еще раз. Любое вовлечение в качестве примера uname ? –  alecail 14.12.2012, 18:02
  • 5
    Идея является любым аргументом scp, проходит две оболочки - сначала локальная и затем удаленная. Так как оболочки разделяют кавычки при необходимости в удаленной оболочке для наблюдения кавычек, необходимо будет заключить им в кавычки так, локальная оболочка не удаляет их. Не уверенный, как uname релевантно? –  jw013 14.12.2012, 18:11

Все специальные символы, как [], (), #, и т.д. необходимо записать после обратной косой черты "\". Можно попробовать, делают это:

$ touch test\[ ; ll test\[ ;
-rw-r--r-- 1 s.gvozdetskiy s.gvozdetskiy 0 Dec 12 12:00 test[
$ mkdir test\[ ; ll ./
...
drwxr-xr-x 2 s.gvozdetskiy s.gvozdetskiy     4096 Dec 12 12:04 test[
...

Я думаю поддержка hfsplus, там конкретная.

0
27.01.2020, 23:54
  • 1
    Проблема происходит, когда scp получает уже заключенный в кавычки аргумент. Оболочка уже заботится о заключении в кавычки (с заполнением клавишей Tab, например) в случае, я тестирую функцию вручную. –  alecail 12.12.2012, 10:34
  • 2
    Таким образом, что такое проблема? Успешная копия: scp -rv test\[/ s.gvozdetskiy@foo-server:/home/s.gvozdetskiy s.gvozdetskiy@172.16.1.252's password: [s.gvozdetskiy@foo-server ~]$ ll ... drwxr-xr-x 2 s.gvozdetskiy s.gvozdetskiy 4096 Dec 12 12:41 test[ ... Или Вы - проблема в функции? –  Sergey Gvozdetskiy 12.12.2012, 10:45
  • 3
    Действительно ли Ваш scp внутри является функцией? –  alecail 12.12.2012, 11:07
  • 4
    Нет, от консоли и никакой проблемы. Я изменяю Ваш сценарий и копирую успешный также: $ cat put.sh #!/bin/sh function putOnSG3() { uuid=uuidgen', если [[-d 1$]]; затем scp-i/s.gvozdetskiy/.ssh/id_rsa-rv "1$" s.gvozdetskiy@foo-server:/home/s.gvozdetskiy/" $uuid за 1. $" &2> 1; еще отзовитесь эхом, 1$ "не является каталогом. Не копирование".; fi} putOnSG3 тест [' я использовал ssh-ключи для, авторизовывают на сервере нечто. –  Sergey Gvozdetskiy 12.12.2012, 11:54

Теги

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