Удалить все файлы, кроме некоторых в Bash, без CD в каталог?

Мне нужно сделать ежедневную уборку в каталоге загрузки.

Я видел этот вопрос и проверил ответ

rm !("test 1"|"test 4")

Он отлично работает, но требует наличия директории cd. Поскольку мое приложение должно быть на две части выше во многих отношениях, я не хочу делать что-то вроде

cd /app/download
rm !("test 1"|"test 4")
cd ../..

я пытался

rm !("./app/download/test 1"|"./app/download/test 4")

Но хорошо, это удалить содержимое вышестоящего каталога, а не скачать /

1 ответ

Решение

Вы были почти там

shopt -s extglob # ← Требуется только если вы еще не включили его
rm ./app/download/!("test 1"|"test 4")

!(…) будет расширен полный путь ко всем файлам, кроме тех, которые находятся в !(…), Поскольку вы добавляете аргументы к rm с пути ./app/download/, никакие другие файлы выше этого каталога не будут удалены.

Другие вопросы по тегам