Я заставил это работать с двумя разными парами ключей (, скажем, пара 1 для bzr
и пара 2 для ssh
логин ). Я добавил соответствующие строки в ~user2/.ssh/authorized_keys
. Закрытый ключ 1 был сохранен в файле id_rsa
(, который читается по умолчанию ). а закрытый ключ 2 хранился в файле id_rsa_ssh
.
Затем bzr
работал нормально, и для входа в систему я использую
[user1@cl]$ ssh -i id_rsa_ssh user2@srv
, что указывает на использование альтернативного идентификатора.
Я бы попробовал что-то похожее на:
find. -readable -type f -exec zip -q zipFileName {} +
Команда:
find. -readable -type f
возвращает все файлы под .
с правами на чтение.
Вторая часть
-exec zip -q zipFileName {} +
выполняет команду zip
, предоставляя найденное имя файла (с ).
Вы можете избежать предупреждений, предоставив zip
расширенный список файлов, которые вы можете прочитать.
В zsh это будет:
zip -r zipFileName /home/som/t12/**/*(.r)
Не меняя zsh в качестве оболочки, вы можете вызывать:
zsh -c 'zip -r zipFileName /home/som/t12/**/*(.r)'
Подстановочные знаки после /home/som/t12/
::
**/*
--включить рекурсию, чтобы каждый файл и каталог раскрывались в списке (.r)
--квалификатор glob, который ограничивает расширенный список простыми файлами (с.
)и --, что особенно важно для этого вопроса, --теми файлами, которые могут быть прочитаны текущим пользователем (сr
). Конечным результатом является то, что строка zip
команды -имеет вид:
zip -r zipFileName home/som/t12/b home/som/t12/c...
... где ...
— это список (простых )файлов в этом каталоге, которые вы можете прочитать.
Одним из побочных эффектов здесь является то, что расширение подстановочных знаков не соответствует явно каталогам, поэтому, хотя ваше предыдущее zip -r zipFileName /home/som/t12/
включало записи каталогов в zip-файл, приведенное выше решение этого не сделает. Файлы в этих подкаталогах по-прежнему будут присутствовать с полными путями в zip-файле.
Если вы заранее знаете имена файлов только для записи -, вы можете указать zip
исключить их с помощью:
zip -r zipFileName /home/som/t12/ -x /home/som/t12/a -x /home/som/t12/any/other/files...
... где флаг -x
указывает zip
, какой файл (s )исключить; не забудьте сопоставить их путь с путем, который вы указали для zip.
Один из способов сделать это — создать список файлов, которые вы хотите сжать с помощью find
, а затем передать их в zip
с опцией -@
.
Например, рассмотрим такой макет:
$ ls -l. test2/
.:
total 0
--w--w--w- 1 testuser testuser 0 Dec 5 21:26 a
-rw-rw-r-- 1 testuser testuser 0 Dec 5 21:26 b
-rw-rw-r-- 1 testuser testuser 0 Dec 5 21:26 c
drwxr-xr-x+ 1 testuser testuser 0 Dec 5 21:31 test2
test2/:
total 0
--w--w--w- 1 testuser testuser 0 Dec 5 21:31 a
-rw-rw-r-- 1 testuser testuser 0 Dec 5 21:26 b
-rw-rw-r-- 1 testuser testuser 0 Dec 5 21:26 c
Затем можно использовать команду find
для исключения файлов с типом разрешения -только на запись (222 в восьмеричной форме ).
$ find. -type f ! -perm 222
./b
./c
./test2/b
./test2/c
Передайте эти файлы zip
, чтобы сжать их в архив:
$ find. -type f ! -perm 222 | zip myfile.zip -@
adding: b (stored 0%)
adding: c (stored 0%)
adding: test2/b (stored 0%)
adding: test2/c (stored 0%)
И проверить ваш архив:
$ unzip -l myfile.zip
Archive: myfile.zip
Length Date Time Name
--------- ---------- ----- ----
0 12-05-2019 21:26 b
0 12-05-2019 21:26 c
0 12-05-2019 21:26 test2/b
0 12-05-2019 21:26 test2/c
--------- -------
0 4 files
Имейте в виду, что здесь команда find
может прерваться, если ваши имена файлов содержат встроенный символ новой строки. Пробелы не проблема, так как опции -@
анализируют каждую строку вывода как один файл.