pgrep
- это правильный путь; Я написал это в основном как упражнение bash
, но в случае, если оно будет полезно кому-то еще:
Оно устанавливает функцию, которая принимает один параметр - имя процесса, которое предположительно соответствует чему-то в ps -eo comm
вывод. Он считывает вывод ps
, настраивая массив идентификаторов идентификаторов и родительских идентификаторов для соответствующих процессов. Как только это будет сделано, он перебирает совпавшие pid-идентификаторы, чтобы найти тот, у которого есть родительский pid, который был , а не в исходном списке / массиве.
# searches the 'ps' listing for matching ($1) processes,
# then displays the "ancestor" PID -- the process that has a parent PID
# that has a different process name
function ancestor () {
# must pass a parameter (process name)
[ -z "$1" ] && return
local -a array
local ppid pid comm
# can't pipe `ps ... | while` as that creates a subshell that loses $array
while read ppid pid comm
do
[ "$comm" = "$1" ] && array[$pid]=$ppid
done < <(ps -eo ppid,pid,comm)
# loop through each pid in array and see which value (ppid) is not a member of the array
for pid in ${!array[@]}
do
[ ${array[${array[$pid]}]-unset} = "unset" ] && { echo $pid; break; }
done
}
Вы можете определить диапазон и удалить из него страницы (используя ~
), чтобы добиться этого:
pdftk 1.pdf cat 2-end~end output output.pdf
Это говорит pdftk cat
для переноса страниц со второй страницы на последнюю включенную страницу (2-конец
) и удаление последней страницы из диапазона (~конец
). В результате получается PDF-файл, содержащий все, кроме первой и последней страниц оригинала.
Вы можете использовать следующий формат:
pdftk A=1.pdf cat A2-(n-1) output 'outputfile_p2-p(n-1).pdf'
Вы можете определить n
через :pdftk 1.pdf dump_data | grep NumberOfPages
e,g: n=8
pdftk A=1.pdf cat A2-7 output 'outputfile_p2-p7.pdf'