Поскольку вы видели основную проблему с перенаправлением оболочки, Вот альтернативный способ обрезать файл до последних 50 строк:
file=/path/to/the/file
n=$(( $(wc -l < "$file") - 50 ))
[[ $n -gt 0 ]] && sed -i 1,${n}d "$file"
Тяжелая работа выполняется (GNU) sed с функцией -i
«редактирование на месте», которая работает под обложками, создавая выходные данные во временном файле. Остальные строки настраивали математику для операции sed, а именно:
wc
), затем вычитайте 50; присвойте это n
. n
положительный, выполните команду sed, чтобы удалить строки с 1 по n. Если вы будете придерживаться инструментов, не зависящих от файловой системы, я не могу придумать, как это сделать, кроме фактического выделения дискового пространства, т.е. резерв
будет необходимо создать (не разреженный!) файл требуемого размера, и вам нужно будет удалить этот файл перед запуском rsync
.
Если файлы находятся на томе ext2 / ext3 / ext4 и использование корневого доступа для некоторых операций допустимо, вы можете использовать его зарезервированное пространство .Зарезервированное пространство обычно предназначено для root, но вместо этого вы можете сделать его доступным другому пользователю или другой группе. Запустите процесс rsync от имени этого пользователя / группы и настройте зарезервированное пространство с помощью tune2fs -m
перед запуском rsync.
Возможно, есть более гибкое решение с пулами ZFS или Btrfs, но я не знаю, как это сделать.
Квоты и связанные с ними инструменты — один из способов добиться этого.
https://linux.die.net/man/1/quota
lvextend и друзья — еще один вариант