Назад | Перейти на главную страницу

Удалите все файлы, которые НЕ начинаются с чего-то

Как в Linux удалить все файлы в каталоге, которые НЕ начинаются с префикса (например, sessions_ *)?

Используя Bash:

shopt -s extglob
rm !(sess_*)

Я предпочитаю найти:

find ./ -type f \( \! -name 'sess_*' \) -exec rm {} \;

Вы можете настроить глубину, чтобы избежать рекурсии.

В приведенном выше

cd / tmp; ls -1 | grep -v sessions_ | xargs rm -f

grep должен быть grep -v '^ sess_ *'

Другие мудрые файлы, такие как ppp_sess_333, остались бы позади.

Одно из решений - передать его через grep. Например:

cd /tmp ; ls -1 | grep -v sess_ | xargs rm -f

Другой вариант - найти (сюда также не входят каталоги):

find /tmp ! -name sess_\* ! -type d -exec rm -f {} \;