Як завантажити останній файл у папку за допомогою 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, виконавши наступне (додав а /*до кінця другого $ 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 за останній день (-1 час -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.