Я избавился бы от 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, но находится на большинстве.
Вот рабочее решение:
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.
Все специальные символы, как [], (), #, и т.д. необходимо записать после обратной косой черты "\". Можно попробовать, делают это:
$ 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, там конкретная.
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
$ 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
scp
аргументы, они должны быть "дважды заключены в кавычки". Это вызвано тем, чтоscp
аргумент, как любой нормальный аргумент оболочки, интерпретируется Вашей оболочкой. Однако однаждыscp
получает аргумент, он должен передать его удаленной оболочке на другой машине, и оболочка там интерпретирует его еще раз. Именно поэтому два слоя заключения в кавычки требуются (\
и"
). – jw013 14.12.2012, 17:37uname
? – alecail 14.12.2012, 18:02uname
релевантно? – jw013 14.12.2012, 18:11