Как удалить все файлы, кроме одного в Unix?

Возможный дубликат:
Как удалить все файлы в каталоге, кроме некоторых?

Как удалить все, кроме одного (или некоторого) файла в Unix?

  • Как ограничить использование процессора и диска rm, чтобы другие программы оставались функциональными
  • Linux Mint не загружается после запуска команды «rm», которая должна была настроить раздел подкачки
  • Как восстановить удаленный файл под Linux?
  • Отменить Linux rm?
  • Когда rm удаляет открытые файлы?
  • Как удалить файл с этим именем в linux: -] ??????? q
  • Что-то вроде

    rm -rf -ignore myfile.txt * 

  • Удалите все файлы, кроме одного с rm
  • Устранение дискового пространства unix-сервера, не добавляющего
  • Что означают скобки и число после команды Unix или функции C?
  • Как я могу использовать ssh для запуска команды на удаленном компьютере Unix и выйти до завершения команды?
  • Какую команду мне нужно использовать для удаления файла с именем `-rf`?
  • Unix / Linux найти и отсортировать по дате изменения
  • 6 Solutions collect form web for “Как удалить все файлы, кроме одного в Unix?”

     ls * | grep -v dont_delete_this_file | xargs rm -rf 

    Пример :

     mkdir test && cd test touch test1 touch test2 touch test3 touch test4 touch test5 

    Чтобы удалить все файлы, кроме 'test2':

     ls * | grep -v test2 | xargs rm -rf 

    Тогда вывод «ls»:

     test2 

    РЕДАКТИРОВАТЬ:

    Спасибо за комментарий. Если каталог содержит некоторые файлы с пробелами:

     mkdir test && cd test touch "test 1" touch "test 2" touch "test 3" touch "test 4" touch "test 5" 

    Вы можете использовать (с bash):

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

    'Ls':

     test 1 test 4 

    Предполагая, что вы используете оболочку bash (наиболее распространенный случай), вы можете использовать символ отрицательного глобализации (расширение имени пути):

     rm -rf !(myfile.txt) 

    Это использует расширенное подтягивание, поэтому вам нужно включить это в первую очередь:

     shopt -s extglob 
      cp myfile.txt somewhere_else; rm -rf * cp somewhere_else/myfile.txt . 
     ln myfile.txt .myfile.txt && rm -rf * && mv .myfile.txt myfile.txt 

    Эта страница предоставляет множество опций в зависимости от оболочки: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html

    Для рекурсивного rm вам нужно будет выполнить рекурсию с помощью find и исключить файлы (ы), которые вы хотели сохранить (или grep , но это может привести к неприятностям). Для оболочки glob современные оболочки имеют шаблоны glob, которые можно использовать для исключения файлов; Это может быть объединено с рекурсией глобулярного глобуса, когда доступно (например, zsh имеет rm **/*~foo/bar – обратите внимание, что это может привести к ограничению длины аргументов для больших деревьев каталогов).

    Давайте будем гением компьютера.