Как исключить некоторые каталоги при удалении с помощью «rm -rf» или «rmdir»?

У меня есть каталоги файловой системы ubuntu в корневом каталоге, и я случайно скопировал сотни файлов в корневой каталог.

Я интуитивно пытался удалить скопированные файлы, исключив файловую систему, например

rm -rf !{bin,sbin,usr,opt,lib,var,etc,srv,libx32,lib64,run,boot,proc,sys,dev} ./. 

Бу не работает. Каков правильный способ исключить некоторые каталоги при удалении целого?

EDIT: Никогда не пытайтесь выполнять какие-либо команды здесь, не зная, что делать!

3 Solutions collect form web for “Как исключить некоторые каталоги при удалении с помощью «rm -rf» или «rmdir»?”

Поскольку вы используете bash :

 shopt -s extglob echo rm -rf ./!(bin|sbin|usr|...) 

Я рекомендую добавить echo в начале командной строки, когда вы запускаете что-то, что потенциально может взорвать всю систему. Удалите его, если вы довольны результатом.

Эта команда покажет все не-каталоги в / :

 find / -maxdepth 1 -type f 

После того, как вы абсолютно уверены, что нет файлов, которые вы хотите сохранить, вы можете использовать:

 find / -maxdepth 1 -type f -delete 

Безопаснее было бы переместить их в другое место, чтобы убедиться, что вы не удаляете то, что хотите сохранить:

 mkdir /root/preserve find / -maxdepth 1 -type f -exec mv -- "{}" /root/preserve/\; 

Если в дополнение к файлам у вас также есть каталоги, которые вы добавили в корень файловой системы, это можно было бы автоматизировать, исключив каталоги LSB из автоматизированного mv или rm , но, честно говоря, поскольку мы имеем дело с чисткой вещей в корне файловой системы, я настоятельно рекомендую вам рассмотреть возможность делать это вручную, если это вообще возможно.

Если это невозможно, что-то вроде этого может сделать трюк:

 #!/bin/bash declare -a excludes for item in root sys 'lost+found' mnt home proc etc opt boot lib lib64 libx32 sbin media srv dev var usr bin tmp run; do excludes+=("$item") done if ! [[ -d /root/preserve ]]; then mkdir -p /root/preserve fi IFS="\n" for item in find / -type d -maxdepth 1; do really=true for exclude in ${excludes[@]}; do if [[ "$exclude" == "${item#/}" ]]; then really=false fi done if [[ "true" == "$really" ]]; then mv -- "$item" /root/preserve/ fi done 

Как только вы пройдете тест крика (т. Е. Ваша система все еще работает, и вы не кричите от муки), вы можете удалить содержимое /root/preserve/ .

И как в стороне, святой танец-танцы-дерьмо, что бы вы ни делали, даже не думайте о том, чтобы выполнить какую-либо перестановку rm -fr [ANYTHING GOES HERE] / .

Это должно выполнить работу (хотя и не так, как задает OP):

 ls -1 >1.txt pico 1.txt 

удалите все файлы / каталоги, которые вы хотите сохранить

 xargs rm < 1.txt 

Если ваши файлы имеют одинаковый формат, дату или что-то еще, то есть другие методы.

Я бы посмотрел на inodes – и посмотрим, являются ли они последовательными через ls -i | sort, и если они есть, то новые файлы будут иметь более крупные inodes. Затем, используя тот же тип процесса, что и выше, …

 ls -iF1 | sort |cut -c10- | grep -vE "\/|\@" >i.txt #This part removes entries that are not regular files, such as directories and links. pico i.txt xargs rm < i.txt 

в команде cut выше, сначала проверьте свой список inodes, чтобы убедиться, что это правильная сумма.

  • Сохранение последних двух версий и удаление оставшихся
  • Удалите папку с тем же именем, что и переменная среды
  • Почему не удается root удалить файл?
  • Возможность удалять файл без разрешения
  • Помощь с сортировкой после запуска rm -rf / * в качестве пользователя без root
  • как удалить файл, начинающийся с «-»
  • папка удаления bash при запуске скрипта
  • Не удается удалить определенные каталоги в определенном родительском каталоге
  • Не может rm-файл, потому что он не существует?
  • Rm не может удалить файл
  • Undeletable directory
  • Interesting Posts

    Что такое устройство фреймбуфера и требуется ли получить более высокое разрешение?

    GRUB, устройство не найдено, проблема с корневой задержкой

    Редактирование последовательности полей в vim

    Выполнить команду 2 независимо от того, выполнена ли команда 1 или нет

    Как вызвать скрипт оболочки из кода Javascript?

    SSH внутри SSH терпит неудачу с «stdin: is not tty»

    В чем смысл строки ** / * при использовании с grep?

    Петля с двумя переменными в сценарии bash

    Значение различных параметров, используемых при запуске сценария оболочки

    Установка TeXstudio rpm: зависимости QT (например, libQtGui.so.4)

    Перенос репозитория APT из плоского в обычный формат прозрачно для конечного пользователя

    Как сделать + работать в регулярных выражениях sed на FreeBSD?

    Установка haskell-платформы без привлечения X-сервера

    Как прервать wget после получения N раз файла не найден?

    Как использовать (1) с системным значением $ PATH?

    Linux и Unix - лучшая ОС в мире.