Находя размер (в пунктах) потомка шрифта в Ghostscript / Postscript?

Как и было запрошено, этот ответ имеет тенденцию к «надежному и безопасному», как вы просили, в отличие от быстрого и грязного.

Переносимость: этот ответ работает в любой системе, содержащей sh , find , sed , sort , ls , grep , xargs и rm .

Сценарий никогда не должен заглушать большой каталог. Расширение имени файла оболочки не выполняется (что может заглушить слишком много файлов, но это огромное количество).

Этот ответ предполагает, что префикс не будет содержать тире ( - ).

Обратите внимание, что по умолчанию скрипт перечисляет только те файлы, которые будут удалены. Вы можете заставить его удалить файлы, направив вывод цикла while в xargs -d '/ n' rm , который закомментирован в сценарии. Таким образом, вы можете легко протестировать скрипт перед включением кода удаления.

#!/bin/sh -e

NUM_TO_KEEP=$(( 0 + ${1:-64000} )) || exit 1

find . -maxdepth 1 -regex '[^-][^-]*-[0-9][0-9]*-[0-9][0-9]*.tar.bz2' |
sed 's/-.*//; s,^\./,,' |
sort -u |
while read prefix
do
    ls -t | grep  "^$prefix-.*-.*\.tar\.bz2$" | sed "1,$NUM_TO_KEEP d"
done # | xargs -d '\n' rm --

Параметр N (количество сохраняемых файлов) по умолчанию равен 64000 (т. Е. Все файлы сохраняются).

Аннотированный код

Получите аргумент командной строки и проверьте целое число путем добавления, если не указано значение параметра по умолчанию 64000 (фактически все):

NUM_TO_KEEP=$(( 0 + ${1:-64000} )) || exit 1

Найти все файлы в текущем каталоге, которые соответствуют формату имени файла:

find . -maxdepth 1 -regex '[^-][^-]*-[0-9][0-9]*-[0-9][0-9]*.tar.bz2' |

Получить префикс: удалить все после префикса и удалить "./ "в начале:

sed 's/-.*//; s,^\./,,' |

Сортировка префиксов и удаление дубликатов ( -u - уникальный):

sort -u |

Прочитать каждый префикс и обработать:

while read prefix
do

Список всех файлов в каталоге, отсортированных по времени, выберите файлы для текущего префикса и удалите все строки за пределами файлов, которые мы хотим сохранить:

    ls -t | grep  "^$prefix-.*-.*\.tar\.bz2$" | sed "1,$NUM_TO_KEEP d"

Для тестирования закомментируйте код для удаления файла. Использование xargs, чтобы избежать проблем с длиной командной строки или пробелами в именах файлов, если они есть . Если вы хотите, чтобы сценарий создавал журнал, добавьте -v в rm , например: rm -v - . Удалите # ], чтобы активировать код удаления:

done # | xargs -d '\n' rm --

Если это сработает для вас, примите этот ответ и проголосуйте. Спасибо.

1
01.01.2018, 11:19
0 ответов

Теги

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