Я пытался бежать
SERVER=$1
ssh user@$SERVER 'ssh -f -N -L 3307:192.168.0.19:3306 -L 3308:192.168.0.20:3306 192.168.0.12 -luser'
с приборной панели
что работает, так это вызов скрипта на целевом сервере с помощью
SERVER=$1
ssh user@$SERVER '~/sh/tunnel.sh'
В оболочке zsh
четыре последних измененных обычных файла в текущем каталоге могут быть получены с помощью шаблона подстановки
./*(.Dom[1,4])
... где ./*
соответствует всем именам в текущем каталоге, а скобки изменяют поведение сопоставления. .
заставляет *
соответствовать только обычным файлам, а D
также соответствует скрытым именам (, как с параметром оболочки dotglob
, включенным в оболочке bash
).. om
упорядочивает результирующий список имен по метке времени модификации, а [1,4]
выбирает первые четыре имени.
Чтобы вызвать tail
для этих файлов:
tail./*(.Dom[1,4])
Из оболочки bash
:
zsh -c 'tail./*(.Dom[1,4])'
Если вы хотите учитывать все файлы в текущем каталоге или в любом месте под ним, используйте
zsh -c 'tail./**/*(.Dom[1,4])'
Шаблон **
работает аналогично тому же шаблону подстановки в bash
, когда включена опция оболочки globstar
, т. е. он рекурсивно сопоставляется с подкаталогами. D
в квалификаторе glob заставит **
соответствовать подкаталогам со скрытыми именами.
Прежде чем я начну, обычно считается плохой практикой использовать вывод ls
в качестве ввода для чего-то другого; общий недостаток заключается в том, что он может не работать должным образом для файлов, содержащих пробелы/новую строку в своем имени.
Имея в виду это ограничение, вы, вероятно, обнаружите, что ls | something
будет нормально работать большую часть времени.
Вы движетесь в правильном направлении со своей командой, вот одно из решений с вышеупомянутой оговоркой об ограничениях ls
:
ls -t | head -5 | xargs tail
Это вызовет нефатальную ошибку, если в вашем списке есть подкаталоги.
Может быть, это поможет вам
find. -type f -mmin -5 -ls | tail -4
Вместо .
=> добавьте путь к целевому каталогу
Эта вышеприведенная команда даст вам последние измененные файлы 5 минут назад, если хотите, вы можете увеличить время последнего изменения минут с 5 минут до нужного вамeg: 15min, 20min, 60min
Если подкаталогов нет, то это должно работать, даже если в именах файлов есть пробелы. Однако это не удастся, если в именах файлов есть символы новой строки.
ls -1t | head -4 | tr '\n' '\0' | xargs -0 head -10
К сожалению, при наличии подкаталогов произойдет сбой. Если есть, то должно работать
find. -type f -maxdepth 1 -print0 | xargs -0 ls -1t | head -4 | tr '\n' '\0' | xargs -0 head -10