Как заметил @Jonas, вам нужно ?
для соответствия одному символу и *
для соответствия нескольким символам. Символ пробела необходимо экранировать с помощью \
.
Если первый шаблон **-**** ?
изменен на ??-????\ *
и экранированные символы пробела, команда должна быть:
cp -r /volume1/User/save/01/??-????\ */GROUPES\ ??-????/ /volume1/User/save/01/
список процессов:
$ ps -e -o pid,user,etimes,comm \
| awk -v me=$USER '$2 == me && $3 <= 3600 { print }'
Производит
661162 jaroslav 3006 chrome
667859 jaroslav 1711 chrome
669145 jaroslav 1471 chrome
671222 jaroslav 1016 chrome
675278 jaroslav 270 chrome
675578 jaroslav 207 sleep
676094 jaroslav 91 chrome
676102 jaroslav 91 chrome
676528 jaroslav 11 chrome
676529 jaroslav 11 chrome
676553 jaroslav 11 chrome
676602 jaroslav 3 top
676615 jaroslav 0 ps
676616 jaroslav 0 awk
извлечь pids:
$ ps -e -o pid,user,etimes,comm \
| awk -v me=$USER '$2 == me && $3 <= 3600 { print $1 }'
Убить подидов:
$ ps -e -o pid,user,etimes,comm \
| awk -v me=$USER '$2 == me && $3 <= 3600 { print $1 }' \
| xargs -rt kill
Аргументы tr -для xargs являются необязательными и будут пропускать xargs, если нет вывода, и сообщать о каждой выполненной строке.
Вы даже можете протестировать его с помощью kill -0
, который ничего не делает для остановки процесса, но сообщает об ошибке, если процесс больше не выполняется.
$ ps -e -o pid,user,etimes,comm \
| awk -v me=$USER '$2 == me && $3 <= 3600 { print $1 }' \
| xargs -rt kill -0
kill -0 661162 667859 669145 671222 675278 676602 677310 677311 677883 677893 677965 677966 677967 677968
kill: (677966): No such process
kill: (677967): No such process
Понимая, что этот канал/скрипт может убить себя после обратной связи, (обратите внимание на etimes=0 в списке процессов выше ), здесь приведена исправленная версия, которая игнорирует самые последние процессы:
ps -u "$LOGNAME" -o pid,etimes,comm \
| awk '$2 <= 3600 && $2 > 1 { print $1 }' \
| xargs -rt kill -0
Это, вероятно, не очень переносимо, но должно работать на Linux (по крайней мере на Ubuntu 18 ). Надеюсь, это дало вам некоторое представление о том, как подойти к этой проблеме.
<mother-mode>
Запустите команду ps без awk и xargs и сначала убейте, чтобы увидеть, что будет убито, и будьте осторожны при запуске от имени пользователя root.Вы потенциально можете выключить систему или убить какую-то важную службу, которая недавно была перезапущена.</mother-mode>