Удаление всех подкаталогов, кроме тех, которые соответствуют определенному шаблону

Удаление всех подкаталогов, кроме тех, которые соответствуют определенному шаблону

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

example_dir/model-*/gen-*/share/**

Общая настройка: Я сгенерировал несколько моделей (> 100), каждая из которых имеет >=1 поколение(я). Внутри этих моделей (например, example_dir/model-0/gen-0/) есть несколько каталогов и подкаталогов.

Желаемый результат: Я хотел бы удалить все каталоги и файлы, кроме тех, которые соответствуют:

example_dir/model-*/gen-*/share/

В каждой отдельной модели/поколении это будет выглядеть примерно так:

rm -rf !(share)

решение1

Я не уверен, что полностью понимаю ваш вопрос, и я не уверен, какие последующие вопросы имеют смысл. Одна вещь, которая меня интересует, это если у вас есть дерево каталогов, например

example_dir
|-- model-0
|   |-- gen-0
|   |   |-- share
|   |   |-- trash
|   |   |   |-- more_trash
|   |   |-- file123.txt
|   |-- grandfather
|-- platypus
foo

достаточно ли удалить example_dir/model-0/gen-0/trash (и его содержимое), или вы также хотите удалить example_dir/model-0/grandfather, example_dir/platypusи foo? А как насчет example_dir/model-0/gen-0/file123.txt?

Если вы хотите удалить trash(и его содержимое) и file123.txt, попробуйте

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)

Если вы хотите удалить trash(и его содержимое), но сохранить file123.txt, попробуйте

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)/

(добавляя /после !(share)).

В любом случае внимательно просмотрите вывод и, если вы уверены, что это то, что вам нужно, выполните команду еще раз без  echo.

Если вы также хотите удалить каталоги верхнего уровня, отличные от example_dir, каталоги первого уровня, которые не соответствуют шаблону model-*, или каталоги второго уровня, которые не соответствуют шаблону gen-*, отредактируйте свой вопрос, чтобы уточнить его.

Связанный контент