Подстановочные знаки разворачивают имена файлов в лексикографическом порядке. Так как Ваш формат даты соответствует лексикографическому порядку, Ваше требование сводит к сохранению последнего X соответствий для подстановочного знака (или все соответствия, если существуют меньше чем X). Я предположу, что Ваши резервные копии являются соответствием файлов $device.*
, скорректируйте шаблон по мере необходимости.
В zsh:
set -- $device.*
if [[ $# -gt $X ]]; then set -- $@{[-$X,-1]}; fi
cp -- $@ /retain/area/
В любой оболочке стиля Границы (пепел, удар, ksh, …):
set -- "$device".*
if [ $# -gt $X ]; then shift $(($#-$X)); fi
cp -- "$@" /retain/area
Если то, что Вы хотите, должно на самом деле удалить более старые файлы, необходимо действовать на первые соответствия, но X (или никакие соответствия, если существуют меньше чем X).
В zsh:
files=($device.*)
rm -f -- $files[1,-$X-1]
В других оболочках:
set -- "$device".*
while [ $# -gt $X ]; do
rm -- "$1"
shift
done
Принятие оболочки POSIX (как bash
), $$
PID текущей оболочки и $PPID
PID родителя. Можно передать $$
к сценарию или проверке значение $PPID
в сценарии.
Идентификатор процесса текущей оболочки находится в специальной переменной $$
.
Можно передать это разветвленному (фон) процесс:
./script $$ &
В "сценарии", который будет первым аргументом, таким образом:
parent_pid=$1
Существует сводка специальных переменных удара здесь.