Scp три новейших файла с использованием Bash - PullRequest
4 голосов
/ 02 апреля 2011

Я пытаюсь найти три новых файла в каталоге.Прямо сейчас я использую ls -t | head -3, чтобы узнать их имена и просто записать их в команду scp, но это становится трудным.Я пытался использовать ls -t | head -3 | scp *username*@*address*:*path*, но это не сработало.Каков наилучший способ сделать это?

Ответы [ 4 ]

7 голосов
/ 02 апреля 2011

возможно самое простое решение, но оно не работает с пробелами в именах файлов

scp `ls -t | head -3` user@server:.

Использование xargs имеет то преимущество, что имеет дело с пробелами в именах файлов, но выполнит scp три раза

ls -t | head -3 | xargs -i scp {} user@server:.

решение на основе цикла будет выглядеть следующим образом.Мы используем здесь пока read, потому что в качестве разделителя по умолчанию для чтения используется символ новой строки, а не символ пробела, такой как цикл for

ls -t | head -3 | while read file ; do scp $file user@server ; done

, к сожалению, идеальное решение, которое выполняет одну команду scp, прекрасно работая с белымпространство, ускользает от меня в данный момент.

1 голос
/ 22 марта 2012

Возможно, это больше не актуально для плаката, но вы привели меня к идее, которая, я думаю, вам нужна:

tar cf - `ls -t | head -3` | ssh *username*@*server* tar xf - -C *path*
1 голос
/ 02 апреля 2011

Попробуйте этот сценарий, чтобы найти последние 3 файла из указанного пути первого аргумента к этому сценарию:

#!/bin/bash

DIR="$1"

for f in $(ls -t `find ${DIR} -maxdepth 1 -type f` | head -3)
 do
    scp ${f} user@host:destinationDirectory
done

find -type f гарантирует, что в $ {DIR} найдены только файлы, а head -3 занимает первые 3 местафайлы.

1 голос
/ 02 апреля 2011

Напишите простой скрипт bash. Этот файл отправит последние три файла, если они являются файлом, а не каталогом.

#! / Bin / Баш

DIR=`/bin/pwd`

for file in `ls -t ${DIR} | head -3`:
 do
  if [ -f ${file} ];
  then
    scp ${file} user@host:destinationDirectory
  fi
done
...