Как исключить некоторые файлы из механизма расширения имени файла в bash?

Файл образа ISO представляет собой архив, поэтому его необходимо извлечь в папку, в которой можно просматривать содержимое. Например, попробуйте щелкнуть правой кнопкой мыши программу 7-zip и выбрать опцию Извлечь в папку.

14
08.11.2018, 08:41
3 ответа

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

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

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

Примечание. Приведенная выше команда не удаляет скрытые файлы (имена которых начинаются с точки). Если вы хотите удалить и их, активируйте также опцию dotglob :

shopt -s dotglob
24
27.01.2020, 19:50

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

ls -1 >1.txt
pico 1.txt 

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

xargs rm < 1.txt

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

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

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

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

3
27.01.2020, 19:50

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

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

После того, как вы прошли тест на крик (т.е. ваша система все еще работает, и вы не кричите от боли), вы можете удалить содержимое / корень / сохранить / .

Важное примечание: что бы вы ни делали, даже не думайте о выполнении какой-либо перестановки rm -fr [ЗДЕСЬ НИЧЕГО ПРОИСХОДИТ] / .

12
27.01.2020, 19:50

Теги

Похожие вопросы