Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Удаление по маске.  (Прочитано 6398 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн E-Not

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Удаление по маске.
« : 26 Октября 2008, 17:55:19 »
Задача такая:
Удалить из текущего каталога все файлы, содержащие подстроку "text".

Пробовал:
rm -f < file.txt ; где file.txt - это список файлов полученных grep-ом
ещё так пробовал:
rm -f grep -l text *.*
но не помогло.
Заранее благодарен.))

Thread

  • Гость
Re: Удаление по маске.
« Ответ #1 : 26 Октября 2008, 17:57:26 »
O_O

rm *text* .*text*

Оффлайн E-Not

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Удаление по маске.
« Ответ #2 : 26 Октября 2008, 18:04:02 »
не совсем...как я понимаю эта команда удалит все файлы В ИМЕНИ которых есть "text". а мне нада в содержании которых есть "text".

Thread

  • Гость
Re: Удаление по маске.
« Ответ #3 : 26 Октября 2008, 18:20:17 »
Да, что-то я слишком быстро прочитал. :) Тогда это:

rm `grep text * .* | sed -e "s/^\([^:]\+\):.\+\$/\\1/"`
Не сработает на файлах, в названии которых есть ":".
« Последнее редактирование: 26 Октября 2008, 18:22:20 от a-v »

Оффлайн E-Not

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Удаление по маске.
« Ответ #4 : 26 Октября 2008, 18:35:24 »
попробовал полностью вводить команду - не сработал,ругается на отсутствие параметров команды rm, попробовал поставить -f, ругаться перестал, но и удалять ничего не стал...(((что же делать(((...

Thread

  • Гость
Re: Удаление по маске.
« Ответ #5 : 26 Октября 2008, 19:38:23 »
Версия 3:

grep text * .* | sed -e "s/^\([^:]\+\):.\+\$/\\1/" | while read FILE; do rm "$FILE"; done

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Удаление по маске.
« Ответ #6 : 26 Октября 2008, 20:08:01 »
Задача такая:
Удалить из текущего каталога все файлы, содержащие подстроку "text".
find -exec grep -l text '{}' \; | while read; do rm "$REPLY"; done

Оффлайн Nebulosa

  • Активист
  • *
  • Сообщений: 397
    • Просмотр профиля
Re: Удаление по маске.
« Ответ #7 : 27 Октября 2008, 08:55:09 »
grep -m1 text * | cut -d":" -f1 | xargs rm

Оффлайн Goren

  • Активист
  • *
  • Сообщений: 808
  • Unconditional Love
    • Просмотр профиля
Re: Удаление по маске.
« Ответ #8 : 27 Октября 2008, 09:11:06 »
или так
rm $(grep -m1 test * | cut -d ":" -f1)Посоревнуемся, у кого получится короче? ;)
Be a realist - denounce the obvious!

Оффлайн Goren

  • Активист
  • *
  • Сообщений: 808
  • Unconditional Love
    • Просмотр профиля
Re: Удаление по маске.
« Ответ #9 : 27 Октября 2008, 09:19:13 »
rm $(grep -l test *)Совершенно незачем было там мудрить :2funny:
Be a realist - denounce the obvious!

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Удаление по маске.
« Ответ #10 : 27 Октября 2008, 11:16:11 »
rm $(grep -l test *)Совершенно незачем было там мудрить :2funny:
$ rm $(grep -l test *)
rm: missing operand
Try `rm --help' for more information.
ы?

Оффлайн Goren

  • Активист
  • *
  • Сообщений: 808
  • Unconditional Love
    • Просмотр профиля
Re: Удаление по маске.
« Ответ #11 : 27 Октября 2008, 11:21:35 »
У меня работает. Что за шелл? У меня dash по умолчанию.
Be a realist - denounce the obvious!

Оффлайн Goren

  • Активист
  • *
  • Сообщений: 808
  • Unconditional Love
    • Просмотр профиля
Re: Удаление по маске.
« Ответ #12 : 27 Октября 2008, 11:29:26 »
А, стоп, врубился в чём дело. Он говорит "missing operand" если искомый стринг нигде не находит. :o Вообще оно даже логично, потому что если стринг не найден, то вся конструкция $(grep -l test *) обращается в null.
Be a realist - denounce the obvious!

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Удаление по маске.
« Ответ #13 : 27 Октября 2008, 12:33:34 »
Ну, тогда самый короткий вариант для bash (с учётом возможных пробелов в именах файлов):
grep -l text * | while read; do rm "$REPLY"; done

Оффлайн Nebulosa

  • Активист
  • *
  • Сообщений: 397
    • Просмотр профиля
Re: Удаление по маске.
« Ответ #14 : 27 Октября 2008, 17:20:57 »
Ну, тогда самый короткий вариант для bash (с учётом возможных пробелов в именах файлов):
grep -l text * | while read; do rm "$REPLY"; done
Да.. чтото опцию -l я почему то не увидел  ???

Тогда тоже самое, но короче (пробелы в именах тоже учитываются):
grep -l text * | xargs -i rm "{}"

 

Страница сгенерирована за 0.051 секунд. Запросов: 23.