УПП три новые файлы, используя Баш
Я пытаюсь найти три самых новых файла в каталоге. Прямо сейчас я использую ls -t | head -3
, чтобы узнать их имена и просто записать их в команде scp, но это становится трудным. Я попробовал использовать ls -t | head -3 | scp *username*@*address*:*path*
, но это не сработало. Как лучше всего это сделать?
4 ответа:
Возможно, самое простое решение, но оно не имеет дела с пробелами в именах файлов
scp `ls -t | head -3` user@server:.
Использование xargs имеет преимущество в работе с пробелами в именах файлов, но будет выполнять scp три раза
ls -t | head -3 | xargs -i scp {} user@server:.
Решение на основе цикла будет выглядеть следующим образом. Мы используем while read здесь, потому что по умолчанию разделителем для чтения является символ новой строки, а не пробел, как в цикле for
ls -t | head -3 | while read file ; do scp $file user@server ; done
К сожалению, идеальное решение, которое выполняет одну команду scp во время работы красиво с белым пространством, ускользает от меня в данный момент.
Напишите простой сценарий bash. Этот отправит последние три файла, если они являются файлом, а не каталогом.
#!/ bin / bash
DIR=`/bin/pwd` for file in `ls -t ${DIR} | head -3`: do if [ -f ${file} ]; then scp ${file} user@host:destinationDirectory fi done
Попробуйте использовать этот скрипт для scp последних 3 файлов из предоставленного 1-го аргумента пути к этому скрипту:
#!/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 файла.