Как исключить некоторые каталоги при удалении с помощью «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, чтобы убедиться, что это правильная сумма.

  • Удаление пустого файла, почему так много вызовов sys?
  • Как удалить файлы и папки под определенной папкой
  • Удаление каталога, в котором нет файлов
  • как удалить более крупный файл (например, 180G) в системе unix?
  • Найти файлы внутри подкаталогов с разными именами (чтобы удалить их с помощью mtime)
  • Как быстро удалить папку с большим количеством подпапок?
  • Удалить файлы, более новые, чем X день и час
  • Как удалить символические ссылки, указывающие на файлы в определенной папке?
  • Почему мой цикл inotifywait завершается после удаления некоторых подкаталогов?
  • Не удается удалить каталог, операция не поддерживается в NTFS
  • Может ли файл быть извлечен его inode?
  • Interesting Posts

    Автоматический пароль gvfs-mount

    Найдите все строки, которые следуют шаблону, и начните с символа

    Пересылка X-окон через су-сессию

    Как искать строку только в текстовых файлах? (рекурсивно)

    Взломать пароль пользователя

    ulimit: разница между жесткими и мягкими пределами

    mdadm – размер массива RAID5 по сравнению с фактическим несоответствием размера диска

    Видео зависает на Xubuntu 13.10 с графикой Intel

    Использование sed / awk для извлечения первого «токена не-whitspace» в каждой строке

    Есть ли команда как голова, но для усечения линии?

    AlphaServer 1000 4/266 в новой системе Alpha Server 1000A 5/333 DU3.2C

    Как прозрачный прокси-сервер SOCKS знает, какой IP-адрес назначения использовать?

    арифметическая операция со столбцами в текстовом файле

    Передача набора параметров программе с использованием переменной Bash

    Если у меня есть очень сильная парольная фраза для моего закрытого ключа gpg, как безрассудно я могу быть с моим .gpg-каталогом?

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