Удалить все файлы, кроме некоторых в 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/
, никакие другие файлы выше этого каталога не будут удалены.