bash – ведение последних версий каталогов

У меня есть следующая иерархия для того, как хранятся мои приложения Python:

PyCharmProjects/app/versions/v1 PyCharmProjects/app/versions/v2 PyCharmProjects/app/versions/v3 PyCharmProjects/app/versions/v4 PyCharmProjects/app/versions/v5 PyCharmProjects/app/versions/v6 

Как я могу написать bash-скрипт для удаления всех каталогов, которые не соответствуют последним 2 версиям и старше 7 дней?

Как я хочу удалить v4, v3, v2 и v1, так как он был создан 9 дней назад.

Можно ли сделать это с помощью регулярных выражений?

Также есть ли способ сделать это внутри самого PyCharm?

Мы можем исключить путь в команде find используя ! -path ! -path как ! -path ниже. что исключит каталог v5 при поиске.

 find directory/* ! -path directory/v5 

Чтобы исключить несколько каталогов, повторите то же самое ! -path ! -path снова в команде поиска, как ! -path ниже. что исключит как v4, так и v5 при поиске.

 find directory/* ! -path directory/v4 ! -path directory/v5 

В вашем сценарии мы не знаем имя папки для исключения. Таким образом, мы можем реализовать другую команду поиска вместо каталога исключений.

Приведенный ниже код даст вам последнюю папку.

 find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions -type d -printf '%T@ %P\n' | sort -nr | head -n1 | awk '{print $2}' 
  • -printf '%T@ %P\n' выведет список папок с отметкой времени
  • sort -nr выполнит обратную сортировку, так что последняя папка будет сверху.
  • head -n1 последнюю папку

И для второй последней папки.

 find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}' 
  • head -n2 даст вам две последние папки.
  • tail -n1 даст вам вторую последнюю папку.

Реализуйте два вышеупомянутых кода вместо v4 и v5 соответственно.

  find PyCharmProjects/app/versions/* -maxdepth 1 ! -path PyCharmProjects/app/versions/`find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}'` ! -path PyCharmProjects/app/versions/`find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}'` -type d -mtime +7 -delete 
  • ! -path путь, чтобы исключить путь
  • -type -d чтобы найти каталоги
  • -maxdepth 1 в текущем каталоге
  • -mtime +7 каталогов, которые были изменены 7 дней назад.
  • -delete найденные каталоги.

Также есть ли способ сделать это внутри самого PyCharm?

Предполагая, что каталоги представляют разные версии программы, над которой вы работаете, стандартный и экономичный способ справиться с этим – использовать систему контроля версий, такую ​​как Git .

После настройки Git переключиться на новую версию так же просто, как напечатать что-то вроде

 $ git add . $ git commit -m 'Commit message, eg "Rewrote the FooBar class, added logging."' $ git push 

Эта последовательность будет равносильна копированию вашего проекта в новый каталог, за исключением того, что она намного экономит место и никогда не требует удаления.

Вы всегда сможете откатиться до любой предыдущей версии, если нужно, с помощью простой команды git checkout COMMIT_ID .

Pycharm имеет встроенную поддержку Git, подробную информацию смотрите здесь и здесь . Однако вы также можете использовать стандартный инструмент командной строки.