rsync последние n файлов с удаленного сервера

Расширение тильды в оболочке ~ является в основном программируемым. Она расширяется либо до каталога пользователя системного имени пользователя, объявленного в трейлинг-контексте (и отличное решение в этом направлении уже было предложено), либо до значения переменной оболочки $HOME, либо вообще не расширяется.

Итак:

(HOME=/tmp; cd ~)
pwd; echo "$HOME"

/tmp
/home/mikeserv

Я постоянно меняю $HOME, и я держу функцию в файле окружения моего шелла для его сброса:

home(){
    HOME=~$USER
    cd ~; pwd
}

Если вы хотите использовать тильду ~ каким-то образом, не относящимся к вашему домашнему каталогу, то сделайте это. Просто переназначьте $HOME. Не бойтесь этого. $HOME - это просто переменная оболочки, как и любая другая.


Еще одно мое предложение - это лишь небольшое расширение отличного совета @PSkocik об использовании $CDPATH. Однако он не упомянул, что вы можете использовать и изменять $CDPATH в строке без изменения текущего значения оболочки для $CDPATH. Например:

mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2

/tmp/1/2

cd обязательно является встроенной оболочкой, но не является встроенной оболочкой POSIX special, и поэтому объявление значения для $CDPATH не влияет на его текущее значение в оболочке. Если вы используете его так, как я сделал выше, значение $CDPATH изменяется только для окружения одной команды cd, после чего восстанавливается до прежнего значения. Я считаю, что вышеописанная техника наиболее полезна при использовании в сочетании с завершением истории. Я делаю то, что описано выше, перехожу в каталог, выполняю несколько команд, затем нажимаю вверх, пока не вернусь к команде cd, и делаю backspace на сегменте пути или двух, чтобы перейти в другое место.


Теперь, если вы объедините эти две концепции, вы можете сделать так, чтобы ранее использованная команда означала что-то совершенно другое при следующем использовании.

for HOME in /tmp ~
do  mkdir -p ~/1/2
    CDPATH=~ cd 1/2
done

/tmp/1/2
/home/mikeserv/1/2
1
17.03.2018, 08:24
1 ответ

Попробуйте

ssh -qx root@example.org "ls -t /path/to/logs | head -6" | rsync --files-from=- -avHS root@example.org:/path/to/logs/.
2
27.01.2020, 23:43

Теги

Похожие вопросы