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

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

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

  • Лучшая практика для псевдонима команды rm и обеспечения ее безопасности
  • Как ограничить использование процессора и диска rm, чтобы другие программы оставались функциональными
  • Linux - не может удалить принадлежащий ему файл с 777 правами доступа
  • Можно ли перечислить имена файлов (или их родительские каталоги), которые были недавно удалены с помощью rm в OS X?
  • Как восстановить удаленный файл под Linux?
  • Удалите все файлы, кроме одного с rm
  • Что-то вроде

    rm -rf -ignore myfile.txt * 

  • Разница между df -k и du -sh
  • Используйте экран GNU в качестве логина "shell"
  • Страница Bash Man: kill <pid> vs kill -9 <pid>
  • Ls -la symbolics ... что означает этот последний символ?
  • Почему мы используем cp для копирования файлов, а не dd? (В unix-производных)
  • Возможно ли установить файл .tar?
  • 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 – обратите внимание, что это может привести к ограничению длины аргументов для больших деревьев каталогов).

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