#bash #unix
#bash #unix
Вопрос:
В первой команде корневой каталог, т. е. te
, Не удаляется. Во второй команде я пытаюсь добавить исключение, чтобы не удалять файлы типа .log
, который в конечном итоге уничтожает исходный каталог. Почему эти команды отличаются и как правильно добавить исключение без удаления исходного каталога?
user:~/mnt/test$ rm -rf te/*
user:~/mnt/test$ ls
no.tar te
user:~/mnt/test$ rm -rf te/* !(*.log)
user:~/mnt/test$ ls
no.tar
Комментарии:
1. Да, все, что находится под te/, должно быть удалено (каталоги, файлы и скрытые файлы), но не сам te/ и не любой файл с этим расширением .log . Для простоты давайте предположим, что файлы .log будут находиться только непосредственно под te/, а не в каких-либо его подкаталогах.
Ответ №1:
Шаблон !(*.log)
extglob также соответствует каталогу te
, поскольку его имя не заканчивается .log
. Чтобы удалить все файлы, находящиеся в te
, кроме файлов с расширением log
, вы должны сделать:
shopt -s dotglob # match hidden files too
echo rm -rf te/!(*.log)
Отбросьте echo
, если вы довольны результатом.