Удаление всех подкаталогов кроме тех, которые соответствуют определенному шаблону
Я хотел бы удалить все подкаталоги и файлы в данном каталоге, кроме каталогов, которые соответствуют определенному шаблону:
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-*
шаблон, пожалуйста, отредактируйте свой вопрос, чтобы уточнить.