Как сохранить последние 4 измененных файла?

Я пытался бежать

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'
3
30.11.2020, 10:16
4 ответа

В оболочке 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 заставит **соответствовать подкаталогам со скрытыми именами.

4
18.03.2021, 22:46

Прежде чем я начну, обычно считается плохой практикой использовать вывод lsв качестве ввода для чего-то другого; общий недостаток заключается в том, что он может не работать должным образом для файлов, содержащих пробелы/новую строку в своем имени.

Имея в виду это ограничение, вы, вероятно, обнаружите, что ls | somethingбудет нормально работать большую часть времени.

Вы движетесь в правильном направлении со своей командой, вот одно из решений с вышеупомянутой оговоркой об ограничениях ls:

ls -t | head -5 | xargs tail

Это вызовет нефатальную ошибку, если в вашем списке есть подкаталоги.

5
18.03.2021, 22:46

Может быть, это поможет вам

find. -type f -mmin -5 -ls | tail -4

Вместо .=> добавьте путь к целевому каталогу

Эта вышеприведенная команда даст вам последние измененные файлы 5 минут назад, если хотите, вы можете увеличить время последнего изменения минут с 5 минут до нужного вамeg: 15min, 20min, 60min

1
18.03.2021, 22:46

Если подкаталогов нет, то это должно работать, даже если в именах файлов есть пробелы. Однако это не удастся, если в именах файлов есть символы новой строки.

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

1
18.03.2021, 22:46

Теги

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