Я пытаюсь просмотреть три самых новых файла в каталоге. Прямо сейчас я использую ls -t | head -3
, чтобы узнать их имена и просто записать их в команде scp, но это становится трудным. Я попытался использовать ls -t | head -3 | scp *username*@*address*:*path*
, но это не сработало. Какой был бы лучший способ сделать это?Scp the Three Newest Files with Bash
ответ
возможно самое простое решение, но оно не имеет дело с пробелами в именах файлов
scp `ls -t | head -3` [email protected]:.
с помощью xargs имеет преимущество дело с пробелами в именах файлов , но будет выполнять scp три раза
ls -t | head -3 | xargs -i scp {} [email protected]:.
решение на основе петли будет выглядеть следующим образом: , Мы используем в то время как прочитать здесь, потому что разделитель по умолчанию для чтения является символ новой строки не символ пробела как для цикла
ls -t | head -3 | while read file ; do scp $file [email protected] ; done
saddly, идеальное решение, один, который выполняет одну команду Scp во время работы хорошо с белым пространством, ускользает от меня в данный момент.
Напишите простой скрипт bash. Этот будет отправлять последние три файла, пока они являются файлом, а не каталогом.
#!/Bin/Баш
DIR=`/bin/pwd`
for file in `ls -t ${DIR} | head -3`:
do
if [ -f ${file} ];
then
scp ${file} [email protected]:destinationDirectory
fi
done
Попробуйте этот сценарий ПКПП последние 3 файла из прилагаемого пути первого аргумента для этого сценария:
#!/bin/bash
DIR="$1"
for f in $(ls -t `find ${DIR} -maxdepth 1 -type f` | head -3)
do
scp ${f} [email protected]:destinationDirectory
done
find -type f
убеждается только файлы находятся в $ {DIR} и head -3
занимает верхние 3 файлов.
Это решение не удастся, если в имени файла есть пробел. Вы должны использовать чтение. – ltc
Это, вероятно, не имеет отношения больше для плаката, но вы привели меня к мысли, которую я считаю, что вы хотите:
tar cf - `ls -t | head -3` | ssh *username*@*server* tar xf - -C *path*
Это умное использование смолы. Я должен буду попробовать это в следующий раз, когда мне понадобится использовать эту команду. Спасибо за сообщение! –
Как и в другом ответе, он также отправит только 1 файл, если первые 2 записи НЕ являются файлами. – anubhava
Я не верю, что плакат когда-либо указывал в его требованиях, что ему нужно иметь дело с каталогами. Фактически то, что он делал, подразумевает, что он этого не делает. – ltc
интересное использование опции -i/{} xarg. Это приведет только к 1 вызову scp, а не к 3 вызовам, которые мы ожидаем от решения на основе цикла? – shellter