Удалить все файлы старше X дней и все пустые папки (linux/bash)

Git не делает ничего, кроме чтения из файла. Это точно не сломает трубу. Вы даже можете создать репозиторий git для каталога только для чтения -и зафиксировать файлы только для чтения -. Пока вы только добавляете и фиксируете вещи, а не делаете что-то, что проверяет или изменяет рабочий каталог, единственное место, где Git должен писать, находится внутри каталога Git(.gitпо умолчанию, но вы можете поместить его куда-нибудь. иначе сgit --git-dir=…).

Если вы действительно беспокоитесь, вы можете убедиться в этом, посмотрев исходный код Git. Или посмотрите, что делает git для фиксации файла…

strace -o commit.strace -f git commit -m wibble foo

Вы увидите только вызовы lstatи open(…, O_RDONLY)на foo.

Что может потерпеть неудачу, так это git addдействие. Если процесс пишет в файл, пока Git его читает, Git может заметить, что файл изменился, и сдаться. Это не влияет на исходный файл в любом случае:git add myfileне должно ничего делать в случае сбоя, но даже если Git каким-то образом содержит ошибки и не восстанавливается должным образом, это повлияет только на индекс Git, а не на файл данных, который Git открывается только для чтения -. Я думаю, что сообщение об ошибке будет «запутано из-за нестабильных исходных данных объекта» , но я не проверял, может быть какая-то другая проверка размера, которая срабатывает первой. Учитывая вашу скорость передачи данных, если git addне работает, сделайте паузу на секунду и повторите попытку.

-1
03.05.2021, 20:09
1 ответ

объединить обе команды в одну;

find /some/path -depth \( \( -type f -daystart -mtime +100 \) -o -type d -empty \) -ls
  • это удаление всех обычных файлов старше 100 дней с начала сегодняшнего дня до времени их последней модификации.
  • плюс все пустые каталоги.

замените -lsна -deleteпосле того, как вы подтвердили, какие файлы/каталоги будут удалены, ибудьте осторожны и знайте, что и по какому пути вы удаляете!!

1
28.07.2021, 11:35

Теги

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