Как сохранить только последние 2 папки и удалить все остальные в каталоге?

У меня есть каталог, содержащий несколько папок, как это:

/
   20170901150843
   20170902123221
   20170903203423
   20170904123245
   20170905115432

Я хотел бы удалить все каталоги и сохранить только последние 2. (2 новые)

Как я могу это сделать ?

22
задан wawanopoulos
20.05.2023 8:53 Количество просмотров материала 2863
Распечатать страницу

4 ответа

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

find . -mindepth 1 -maxdepth 1 -type d | \
    grep -vE '\./(20170904123245|20170905115432)' | \
    xargs rm -rf
0
отвечен Attie 2023-05-21 16:41

если они названы таким образом, это будет работать.

find . -maxdepth 0 -type 'd' | sort -r | tail -n +2 | while read line; do rm -rfv "$line"; done

объяснение:

  1. найти каталоги в текущем рабочем каталоге
  2. сортируйте их имена в обратном порядке (важно для следующего шага)
  3. читать все, кроме первых 2 строк ввода на выходе
  4. удалить(рекурсивно, принудительно и многословно) запись (в данном случае directory) с именем, соответствующим каждой строке ввода
0
отвечен user4437749 2023-05-21 18:58

Я бы произвел этот список из 1 столбца имен каталогов в файл с именем bb.для примера. Отредактируйте файл и удалите 2 каталога, которые вы хотите сохранить. Обязательно удалите эти 2 каталога. Затем создайте и отредактируйте новый файл, скажем aa.из. В АА.out положить много строк, содержащих только rm-f вы можете сделать это быстро и легко, набрав 5 строк rm-rf, а затем использовать копировать один раз и вставить много раз, чтобы сделать aa.вне имейте так много или больше линии как bb.из. Теперь просто введитеpaste aa.out bb.out > cc.out теперь просто источник cc.из и он удалит все ваши файлы. УК.out будет содержать n строк rm -rf filename.

0
отвечен jmh 2023-05-21 21:15

следующее должно сделать это:

ls -Fd DirPath/20*|grep '/$'|head -n -2|while read -r d; do rm -rf "$d"; done

это работает следующим образом:-

  • ls перечисляет в записях порядка имен в DirPath начиная с 20.
  • на -F опция классифицирует файлы с завершающим символом, который / для каталогов.
  • на -d опция перечисляет имена каталогов, а не их содержимое.
  • grep гарантирует, что файлы, не каталоги исключенный.
  • head копирует все строки, кроме двух последних.
  • while read -r d присваивает переменной d в каждую директорию по очереди.
  • для каждой директории rm -rf удаляет его.

Примечание:

  • рекомендую поставить echo до rm во время тестирования, чтобы убедиться, что вы удаляете каталоги, которые вы хотите.
  • возможно, Вам придется разработать маску, если есть другие каталоги начиная с 20, eg 20[1-9][0-9][01][0-9]* или что-то еще более подробно.
  • можно использовать xargs rm -rf вместо while loop: это будет работать в вашем случае, но я позволил расширить технику до более общего случая, когда в именах могут быть встроенные пробелы.
0
отвечен AFH 2023-05-21 23:32

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх