Zip -r и хочет исключить/игнорировать файлы без разрешения на чтение.

Я заставил это работать с двумя разными парами ключей (, скажем, пара 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

, что указывает на использование альтернативного идентификатора.

2
05.12.2019, 17:56
3 ответа

Я бы попробовал что-то похожее на:

find. -readable -type f -exec zip -q zipFileName {} +

Команда:

find. -readable -type f

возвращает все файлы под .с правами на чтение.

Вторая часть

-exec zip -q zipFileName {} +

выполняет команду zip, предоставляя найденное имя файла (с ).

3
27.01.2020, 21:58

Вы можете избежать предупреждений, предоставив 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.

3
27.01.2020, 21:58

Один из способов сделать это — создать список файлов, которые вы хотите сжать с помощью 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может прерваться, если ваши имена файлов содержат встроенный символ новой строки. Пробелы не проблема, так как опции -@анализируют каждую строку вывода как один файл.

0
27.01.2020, 21:58

Теги

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