2013-03-20 5 views
1

У меня есть странная проблема при взаимодействии с SFTP-сервером. Мне нужно войти в систему, найти последний файл, удовлетворяющий определенным критериям, и загрузить его. Все это из сценария bash. Как это было сделано до сих пор была просто запуская ls -lt и принимая первую строку вывода:Bash + SFTP shell: сортировать отсортированный список файлов?

echo "ls -lt" > tmp.sftp 
sftp -b tmp.sftp [email protected]:/inbox 1>sftp.log 2>&1 

FILE=$(cat sftp.log | sed -n 3p | awk '{print $NF}') 

echo "get $FILE" > tmp.sftp 
sftp -b tmp.sftp [email protected]:/inbox 

Однако, в последнее время они начали помещать другие файлы (которые я не забочусь о) в ту же папку , Я попытался изменить код, чтобы сделать ls -lt blah*, но по какой-то причине, когда есть подстановочный фильтр, список файлов сортируется в обратном порядке ...

Я чувствую себя так, как я решаю это смешно, должно быть лучший способ. В каком направлении я смотрю? Curl? Wget? Благодаря!

ответ

1

Вы можете изменить порядок вывода ваших Ls, добавив флаг -r.

ls -ltr 
0

Если вы можете сделать sftp, вы можете сделать ssh и scp. Все они используют один и тот же процесс демона: sshd:

Это может сделать вашу задачу немного проще, чем пытаться сделать все через scp.

С ssh, вы можете выполнить удаленную команду и иметь, что удаленный отчет команды обратно в систему:

$ ssh [email protected] ls -lt inbox 

Это будет список файлов на удаленной системе в порядке имен. Кстати, почему вся связь с -l в команде ls? Почему бы просто не сделать это:

$ ls -t | head -1 

Это перечислит последний файл для вас, и вы могли бы сделать это удаленно:

$ FILE=$(ssh [email protected] ls -t inbox | head -1) 

После того как вы этот файл, вы можете использовать scp скопировать его:

$ scp [email protected]:/inbox/$ FILE.

+0

Спасибо за ваши предложения. К сожалению, 'ssh user @ ftps.server.com' зависает, я предполагаю, что у них установлены оболочки'/bin/false' или что-то еще. – braindancer

Смежные вопросы