Обратите внимание, что -mtime 15
означает «чей возраст, округленный до следующей 24-часовой единицы, составляет 15» , то есть файлы, измененные между 14 * 24
часов назад и 15 * 24
часов назад (обратите внимание, что мы не говорим здесь о днях , поскольку во многих часовых поясах у вас есть один 23-часовой день и один 25-часовой день в году ). Предполагая, что это то, что вы хотите, с помощью zsh
вы можете сделать:
ls -lrtd -- **/ABC1[23](D.m15)
Или:
find . -type f -name 'ABC1[23]' -mtime 15 -exec ls -lrtd {} +
Однако обратите внимание, что если количество файлов превышает максимальный размер аргументов и среды, переданных команде, первый завершится ошибкой, а второй вызовет выполнение нескольких экземпляров ls
, и, таким образом, список не будет соответствовать временному порядку, запрошенному с помощью -t
.
Используя zsh
и GNU ls
, вы можете обойти это с помощью:
autoload zargs
zargs -- **/ABC1[23](D.m15Om) -- ls -lUd
То есть, пусть zsh
выполнит сортировку и передаст список в один или несколько вызовов ls
по мере необходимости, но сообщающих ls
не сортировать список. Для других реализаций ls
вы можете заменить U
на rt
, чтобы позволить ему выполнить еще одну бесполезную, но безвредную сортировку.
Если вам нужен диапазон вроде ABC17
-> ABC23
вместо только ABC12
, ABC13
, с zsh
, вы должны сделать:
ls -lrtd -- **/ABC<17-23>(D.m15)
(обратите внимание, что ABC <17-23>
соответствует ABC17
, но также ABC0000017
.Если это проблема, измените <17-23>
на (<17-23> ~ ^ ??)
( extendedglob
параметр, необходимый для шаблона ~ exclude
glob operator), чтобы гарантировать соответствие только двухзначным числам, или (<17-23> ~ 0 *)
, чтобы исключить числа с начальным 0).
Если это файл, имя которого начинается с с ABC12
, а не с на ABC12
, то вы должны сделать
ls -lrtd -- **/ABC<17-23>*(D.m15)
Но учтите, что это также будет соответствовать ABC170. Чтобы этого избежать:
setopt extendedglob
ls -lrtd -- **/ABC<17-23>^[0-9]*(D.m15)
То есть <17-23>
, за которым следует что-нибудь, кроме того, что начинается с десятичной цифры.
Эквивалент поиска
(хотя не позволяет нули в начале и с проблемой, описанной выше для большого количества файлов, а также с потенциальными проблемами, если имена файлов содержат недопустимые символы, и с ./
] для всех файлов) будет выглядеть примерно так:
find . \( -name 'ABC1[7-9]*' -o -name 'ABC2[0-3]*' \) \
! -name 'ABC??[0-9]*' -mtime 15 -type f \
-exec ls -lrtd {} +
Вы можете выполнить это с помощью команды nohup, если она установлена.
цитата из https://www.cyberciti.biz/tips/nohup-execute-commands-after-you-exit-from-a-shell-prompt.html
синтаксис команды nohup:
Синтаксис следующий
nohup имя-команды &
ИЛИ
nohup / путь / к / имя-команды арг1 аргумент2 &
Где,
имя-команды: имя оболочки имя сценария или команды. Вы можете передать аргумент команде или сценарию оболочки. &: nohup не помещает автоматически выполняемую команду в фоновый режим; вы должны сделать это явно, завершив командную строку символом &.
Вам также может быть лучше настроить это задание, если вам придется регулярно запускать его как задание crontab
на сервере.
Нажмите Ctrl + Z , чтобы приостановить процесс. Затем выполните следующие две команды:
bg
disown %1
После этого вы сможете выйти из системы и оставить процесс запущенным без вас. Но вы больше не сможете взаимодействовать с процессом каким-либо образом (кроме как убить его).
В будущем вы можете посмотреть на screen
, nohup
или tmux
для длительных процессов.