Как скачать последний файл в папке с помощью scp?


10

Я хотел бы запустить передачу scp, чтобы загрузить последний (самый новый) файл из определенного каталога в мой локальный каталог.

Что-то вроде этого:

  • источник :root@rimmer.sk:/home/rimmer/backups/
  • пункт назначения :/home/rimmer/backups/

Получая только самые новые файлы, не все из них, в backups.

Ответы:


12

Предположим, у вас есть переменные serverи dirопределены, вы можете сделать

$ dir="~"
$ server="user@server.com"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .

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

Примечание: я не проверял его на защищенность от ошибок (например, последняя запись - это папка)


Если это каталог, который не будет ничего scp. Вам нужно использовать scp -r.
SLM

@slm Правильно, но он может не захотеть копировать это.
Бернхард

Если scpполучение прервано, оно должно будет возобновить копирование с самого начала, rsyncможет возобновить с того места, где оно остановилось.
SLM

Для bash мне нужно было заменить одинарные кавычки на двойные в аргументе ssh.
Йоханнес Биттнер

1
Вы можете удалить первый $ dir, выполнив следующее (добавив a /*в конец второго $ dir):scp $server:$(ssh $server 'ls -t $dir/* | head -1') .
Джесси

1

scpтупой в том смысле, что он просто слепо копирует файлы из источника в место назначения. Если вы хотите что-то более интеллектуальное в копировании файлов, вам нужно использовать такой инструмент, как rsync.

$ rsync -avz root@rimmer.sk:'$(find /home/rimmer/backups/ -ctime -1)' /home/rimmer/backups/

Это будет копировать только те файлы, которые отсутствуют или были изменены из каталога резервных копий rimmer.sk в последний день (-ctime -1) в локальный каталог резервных копий.

-ctime n
   File's  status  was last changed n*24 hours ago.  See the comments for 
   -atime to understand how rounding affects the interpretation of file 
   status change times.

Ссылки


Проблема с rsync такая же. Если я был в автономном режиме в течение 2 дней, он пытается скопировать все резервные копии за все дни, которые мне совсем не нужны и огромны.
Ричард Родригес

@RichardRodriguez - Хорошо, пожалуйста, обновите свой вопрос и уточните, что вы ищете.
SLM

2
@Slm: Я думаю, что вопрос в порядке, как есть. Я просто хочу скачать последний файл в каталоге. Что еще я могу объяснить по этому поводу? :)
Ричард Родригес

@RichardRodriguez - какие файлы находятся в этом каталоге? Пример листинга будет полезен.
SLM

1
Почему голосование против?
SLM

0

Немного опоздал на вечеринку, но, возможно, решение с ssh и rsync подойдет для некоторых:

source_host="yourhost.com"
source_dir="/a/dir/on/yourhost.com/"
target_dir="/the/dir/where/last_backup/will/be/placed"
last_backup=$(ssh user@${source_host} "ls -t ${source_dir} | head -1")
if [ "${last_backup}" == "" ]; then
    echo "ERROR: didn't find a backup, cannot continue!"
else
    echo "the last backup is: ${last_backup}"
    rsync -avzh user@${source_host}:${source_dir}/${last_backup} ${target_dir}
fi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.