Можно ли заставить SCP фильтровать файлы, которые он копирует по дате, например, если вы хотите скопировать все файлы, созданные 12/29, и игнорировать другие?
2 ответа
Вы не можете сделать это напрямую с scp
. Способ Unix состоит в том, чтобы объединить инструменты, вам нужна команда find
.
Вот пример поиска файла с заданной датой:
touch --date "2007-01-01" start
touch --date "2008-01-01" end
find -type f -newer start -not -newer end
Я взял этот пример отсюда: http://www.cyberciti.biz/faq/linux-unix-osxfind-files-by-date/
Чтобы вставить это в scp, вы можете сделать это:
find -type f -newer start -not -newer end -exec scp {} dest: \;
Это вызовет scp один раз для каждого файла, что может быть медленным, потому что ему нужно каждый раз устанавливать соединение. Если у вас есть только несколько файлов и в именах нет пробелов, вы можете сделать это:
scp `find -type f -newer start -not -newer end` dest:
Эффективный (в одну строку!) здесь дается альтернатива (@sudodus), которая копирует через канал SSH, используя 'cpio' в режиме копирования. Вы можете настроить аргументы поиска так, как вам нужно, возможно, используя тесты время / мин / новее.
Чтобы получить точный тест даты и времени, создайте фиктивный файл с правильными временем и датой в исходной системе, используйте тест find -newer или тест man-страницы -newerXY. Смотрите https://linux.die.net/man/1/find
Выходные данные команды find, выполняемой в удаленной системе, безопасно передаются обратно в локальную систему через ssh и сохраняются.
Похоже, что он делает все, что вам нужно, но не использует «scp», что может повлиять на вашу маркировку. Но он использует комбинацию инструментов Unix - это подход Unix!
В любом случае, scp является ярлыком для наиболее распространенных случаев, этот подход более эффективен, когда требуется фильтрация файлов.
ssh username@ip-adress '(cd /path/to/sourcedir; find . -print | cpio -oBav -Hcrc)' | ( cd /path/to/targetdir && cpio -ivumd )
https://askubuntu.com/questions/1080590/how-to-use-find-in-scp-command