Мне нужно скопировать все файлы из удаленной папки (есть подпапки), отфильтрованные по имени, в локальную, но с той же структурой подпапок.
Я сделал
./sshpass -p 'XXX' scp -r tpx@192.168.1.6:/app/eretail/gaia/web/eti/*new.html .
Но эти файлы скопированы только в корневую папку. На удаленном, например, файле 01new.html
в подпапке 01
и мне нужно скопировать и эти файлы, с той же структурой вложенных папок. Например, вот так.
Remote
/app/eretail/gaia/web/eti/02new.html
/app/eretail/gaia/web/eti/01/01new.html
/app/eretail/gaia/web/eti/01/test.html
Local (ожидаемый результат)
./02new.html
./01/01new.html
Как я могу это сделать? Нужно ли мне использовать find
? Как?
Спасибо.
EDIT: rsync
невозможно.
Спасибо @FedonKadifeli за ответ, он привел меня в правильном направлении. Кажется, его решение сработало, но, боюсь, не для старого дедушки AIX.
Я сделал это таким образом, может быть, для кого-то полезного.
./sshpass -p 'XXX' ssh tpx@192.168.1.6 "
cd /app/eretail/gaia/web/eti/
find . -name '*new.html' -exec tar -rvf etikety-html.tar {} \;
"
./sshpass -p 'XXX' scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tpx@192.168.1.6:/app/eretail/gaia/web/eti/etikety-html.tar .
tar -xvf etikety-html.tar
Я упомянул в своем комментарии выше о параметре - include
для команда tar
. Однако команда GNU tar
не содержит параметр - include
. Итак, правильный ответ будет таким:
./sshpass -p 'XXX' \
ssh tpx@192.168.1.6 "cd /app/eretail/gaia/web/eti/ ; \
find . -name '*new.html' -print0 | tar -cvf - --null -T -" \
| tar -xvf -
Здесь мы используем ssh
вместо sftp
. ssh
запустит команды cd
, find
и первый tar
на удаленном сервере в "tar" файлы, найденные с помощью , находят
на stdout
. Последняя команда tar
будет запущена на локальном компьютере, чтобы «разархивировать» файлы, поступающие из stdin
в текущий каталог.