Linux удалить все кроме папки

Обновлено: 02.07.2024

В директории удалить все файлы кроме заданных

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

В директории удалить все файлы кроме заданных

Как в текущей директории удалить все файлы кроме заданных? Например директория "/dir1", а неудаляемые файлы "file1", "file2". Как в текущей директории удалить все файлы кроме заданных? Например директория "/dir1", а неудаляемые файлы "file1", "file2".

как-то так.
Это -delete не нужно сразу ставить, лучше сначала без него посмотреть, что получается.

PS: если есть какие-то каталоги, в которые НЕ нужно заходить вообще, используйте -prune

PS2: обход осуществляется в обратном порядке, каталоги тоже обходятся. И симлинки с хардлинками. Будьте внимательны.

PS3: ещё полезно -empty, которая даёт Ъ, если файл/каталог пуст.

Скоро придёт
Осень

И чего здесь плохого? При выводе в пайп ls выдаст тот же результат, что и find. Разве что при именах с пробелами потребуется дополнительная обработка.

Да и лишнего написали много. Я думал, любителям sed свойственна чрезмерная лаконичность, а не наоборот. :)

если есть какие-то каталоги, в которые НЕ нужно заходить вообще обход осуществляется в обратном порядке, каталоги тоже обходятся UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code. И чего здесь плохого? При выводе в пайп ls выдаст тот же результат, что и find. Разве что при именах с пробелами потребуется дополнительная обработка.
плохо то, что ls не обладает никакими способами обхода. Да и выдавать нормальные имена она умеет через. Неинтуитивно (через --quoting-style=WORD, а вот как вы ЭТО будете пихать в rm, это ещё один отдельный вопрос.
Да и лишнего написали много. Я думал, любителям sed свойственна чрезмерная лаконичность, а не наоборот. :)

а я думал, что даже фанатеги микроскопа всё равно не станут рекомендовать забивать своим тотемом гвозди. (:

На самом деле -- я пробовал. Способ с ls|sed|rm тупо не нужен, ибо тупо неудобен. ИМХО.

каталог ./d1/d2/d3/d4/ тоже "в текущей директории". Разве не так?

ещё PS: для задания глубины find умеет -maxdepth и -mindepth, а ls не умеет (только -R умеет)

Скоро придёт
Осень

каталог ./d1/d2/d3/d4/ тоже "в текущей директории". Разве не так?

Строго говоря, нет. Он в директории d1/d2/d3/

Конкретно насчет find-а согласен. Да и то только при обработке самим find-ом либо -print0 | xargs -0

А насчёт for, видимо, осталась привычка со старых версий bash, где конструкция "for f in *" и пробелы-то нормально не обрабатывала - в этом смысле надо переучиваться. (:


строго говоря d1 тоже файл, и его тоже надо удалять. Почему нет?
Да и то только при обработке самим find-ом либо -print0 | xargs -0
ну а зачем вообще имя передавать? Лишняя сущность это всегда источник ошибок ИМХО.

Скоро придёт
Осень

строго говоря d1 тоже файл, и его тоже надо удалять. Почему нет?

Вы знаете людей, которые всерьез называют каталоги файлами? Я таких не встречал.

ну а зачем вообще имя передавать? Лишняя сущность это всегда источник ошибок ИМХО. Конкретно в этом случае согласен. В более сложных это может быть гораздо меньшим источником ошибок, чем нагромождения скобок и вызовы subshell-ов внутри самого find-а.

Я извиняюсь конечно, может чего не поняла, но зачем так сложно? Ведь оболочка распознает шаблоны.

Вы знаете людей, которые всерьез называют каталоги файлами? Я таких не встречал.

а я такого каждый день наблюдаю. В зеркале.

Да и вообще считаю, что называть каталоги файлами -- это такое Дао, которое просто необходимо пройти, если не хочешь всю жизнь прозябать в криво поставленном кем-то маздае.

Как всегда, ВСЁ выше(и ниже) изложенное == МХО.

Конкретно в этом случае согласен. В более сложных это может быть гораздо меньшим источником ошибок, чем нагромождения скобок и вызовы subshell-ов внутри самого find-а.

а по моему опыту сложная команда find работает быстрее, и изменять её удобнее. Даже в том случае, если её результат -- список файлов, который потом как-то иначе обрабатывается.

И да, субшеллы внутрь find я-бы не рекомендовал пихать. Их можно и снаружи организовать ввиде конвейера.

В итоге, по моему опыту, если нужно выполнить сложную задачу из серии "взять файлы по сложному условию и выполнить сложное действие над ними" лучше выполнять таким кодом:

Подскажите, как удалить файлы и папки кроме одной? В Ubuntu 16.04. Сама папка находится по такому пути /var/lib/tomcat8/webapps/ROOT/ .

Делаю скрипт, который сам деплоит (распаковывает) проект для tomcat'а из архива. Сам скрипт .sh находится в корне.

Я попробовал сделать так:

Но так получилось, что у меня снеслась вся система - пришлось переустанавливать.

Подскажите, пожалуйста, как правильно это сделать?


31.9k 22 22 золотых знака 119 119 серебряных знаков 206 206 бронзовых знаков


3,805 4 4 золотых знака 18 18 серебряных знаков 47 47 бронзовых знаков @NickVolynkin наверно для задержки. нашел это в инете.

Рассмотрим одну из строчек вашего скрипта. Тут содержится уязвимость, вероятно, из-за этого и сломалась система.

Вообще говоря, разбирать вывод утилиты ls — очень плохая идея. То, что показывает ls, предназначено в первую очередь для чтения человеком.

Лучшим подходом будет использование утилиты find в сочетании с xargs примерно таким образом

    -maxdepth 1 ограничивает область поиска текущим каталогом (так сделано для упрощения последующего условия)

-not -name test — а это по сути само условие поиска (файлы, чьё имя не test)

Если файлов, которые хотим сохранить, несколько, их можно перечислять, добавляя дополнительные предикаты -name .

-print0 заставляет find печатать имена файла, разделяя их нулевым байтом, чтобы xargs в последствии правильно бы их считала (для этого используется флаг -0 )

Мне ещё импонирует вот такой «башизм» для указания всех файлов в текущем каталоге кроме заданного. Активируется он с помощью встроенной команды shopt, которая меняет параметры работы текущей оболочки.

Опция extglob включает такой расширенный синтаксис файловой подстановки, dotglob нужна, чтобы также подставлялись и скрытые файлы.

Несколько файлов, которые нужно уберечь от удаления, перечисляются в круглых скобках с разделителями — вертикальными палочками | .

И да, мне не очень нравится, что у вас sudo суть ли не в каждой строчке. Думаю, вам стоит избавиться от этого, но сам скрипт запускать, дав ему права суперпользователя.


$ ls -al
total 0
drwxr-xr-x 2 YurkovVV Админист 0 Jan 9 07:56 .
drwxr-xr-x 8 YurkovVV Админист 0 Jan 9 07:55 ..
-rw-r--r-- 1 YurkovVV Админист 0 Jan 9 07:56 0
-rw-r--r-- 1 YurkovVV Админист 0 Jan 9 07:56 1
-rw-r--r-- 1 YurkovVV Админист 0 Jan 9 07:56 2
-rw-r--r-- 1 YurkovVV Админист 0 Jan 9 07:56 3
-rw-r--r-- 1 YurkovVV Админист 0 Jan 9 07:56 4
-rw-r--r-- 1 YurkovVV Админист 0 Jan 9 07:56 5
-rw-r--r-- 1 YurkovVV Админист 0 Jan 9 07:56 6
-rw-r--r-- 1 YurkovVV Админист 0 Jan 9 07:56 7
-rw-r--r-- 1 YurkovVV Админист 0 Jan 9 07:56 8
-rw-r--r-- 1 YurkovVV Админист 0 Jan 9 07:56 9

$ for i in `ls --ignore=3` ; do rm -f $i;done;
$ ls -al
total 0
drwxr-xr-x 2 YurkovVV Админист 0 Jan 9 08:01 .
drwxr-xr-x 8 YurkovVV Админист 0 Jan 9 07:55 ..
-rw-r--r-- 1 YurkovVV Админист 0 Jan 9 07:56 3


Во-первых, всё то, что ты понаписал, будет работать только с "хорошими" именами файлов, а во-вторых, у тебя действительно имя группы русскими буквами? Это ж ещё додуматься надо.


Под "хорошими" подразумевается regexp.
Хорош оффтопить, это же MSYS. ;-)


Лучше пример своих файлов приведи, а то меня сейчас съедят некоторые!


find . -type f -not -name "asdvc" -not -name "sdfb" -print0 |xargs -0 rm

Удаляем все файлы, кроме имеющих имена "asdvc" и "sdfb". Быстро, качественно, надёжно. Гарантия полгода.


В этом руководстве мы узнаем, как использовать команду rm для безопасного удаления всех файлов из каталога.

Эта статья поможет вам удалить как нескрытые файлы, файлы с определенными расширениями, скрытые файлы внутри каталога.

1. Чтобы удалить все не скрытые файлы из каталога, введите:

2. Чтобы удалить из каталога все файлы с расширением .txt, введите:

3. Чтобы удалить все не скрытые файлы и подкаталоги вместе со всем их содержимым, запустите:

4. Чтобы удалить все скрытые файлы и каталоги из папки, введите:

5. Чтобы удалить все файлы из папки, но не удалять ее подкаталоги:

6. Чтобы удалить папку, в названии которой есть пробел, всегда используйте кавычки, например:

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

Например: Чтобы удалить каталог с именем «Good Morning», введите:

7. Вы можете увидеть, что происходит при удалении всех файлов в каталоге, передав параметр -v команде rm:

8. Чтобы удалить все файлы из каталога с расширением .sh, вы также можете использовать команду find,

Примечание: вместо «* .sh» просто укажите «*», чтобы удалить все файлы.

Общие сведения о параметрах команды rm

  • -f: игнорировать несуществующие файлы и аргументы, никогда не запрашивать
  • -r: рекурсивно удалять каталоги и их содержимое
  • -v: посмотреть, что происходит

Добавить комментарий Отменить ответ


Существует множество вариантов лучших тем для Ubuntu. Но тестирование всех тем и выбор лучшей из них отнимает много времени и сил. Да и предустановленная тема может вам не понравиться. Поэтому мы отобрали 10 лучших тем Ubuntu для вашего рабочего стола Linux. Итак, как превратить рабочий стол в красивую и элегантную среду? С помощью нескольких простых.

Краткий обзор того, как работают гипервизоры и в чем разница между двумя их типами. Прежде чем вы увидите разницу между гипервизором типа 1 и типа 2 и узнаете, какой из них лучше (если это вообще возможно), давайте сначала рассмотрим, что такое гипервизор. Что такое гипервизор? Гипервизор – это системное программное обеспечение, которое выступает в качестве.

Итак, вы установили свой сервер Linux и установили все необходимые пакеты. Теперь вы собираетесь установить другой сервер с аналогичными пакетами. Вы можете сохранить команды установки первого сервера и запустить их на второй машине. Как быть, если вы делали это в течение нескольких недель и забыли некоторые детали, но вам нужно быстро запустить другой сервер. ssh.

Команда Linux top широко используется системными администраторами Linux в режиме реального времени для проверки использования системных ресурсов, таких как процессор, дисковый ввод/вывод, средняя загрузка системы, запущенные процессы и использование памяти. Я обычно использую Oracle OSWatcher Black Box (OSWbb) для сбора различных системных данных для диагностики проблем производительности в течение определенного периода времени. Но если вы.

Читайте также: