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

У меня была такая же проблема с картой беспроводного адаптера D-Link, когда я обновился до 10.04. Перед обновлением все работало отлично, но после этого ничего не связывалось. Я мог видеть SSID с беспроводных точек доступа, но не мог подключиться.

Единственный способ, которым я смог исправить проблему, - установить и настроить Ndiswrapper (инструмент, который позволяет использовать драйверы Windows для вашей беспроводной карты). После того, как я это сделал, все работает нормально. Я думаю, что при обновлении до 10.04 они обнаружили, что существующие беспроводные драйверы противоречат другим библиотекам, которые разработчики хотели в 10.04, поэтому они решили удалить драйверы для этих беспроводных карт в процессе установки / обновления. Я не уверен на 100%, что это не так в вашей проблеме, но я бы сказал, определенно попробуйте Ndiswrapper, чтобы проверить, исправляет ли она проблему. Это звучит как проблема с драйвером.

1
задан 6 October 2017 в 01:39

9 ответов

Используйте sudo

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

sudo find -type f -name '*omero*'

Затем, если список выглядит хорошо [!d2 ]

    sudo find -type f -name '*omero*' -delete

или указать местоположение для поиска (вы уже знаете, что эти файлы находятся в / etc)

sudo find /etc -iname '*omero*' -delete

-delete быстрее, чем -exec rm {} \; или -print0 | xargs -0 rm, поскольку он не должен порождать другой процесс.

EDIT: Из комментариев

for i in $(locate omero) ; do rm $i ; done
4
ответ дан 22 May 2018 в 17:49
  • 1
    Я должен быть более ясным. Сухой ход НЕ СМОТРЕТЬ. Я не хочу удалять дополнительные пакеты, которые find обнаружил, что locate не нашел. – Max 5 October 2017 в 20:53
  • 2
    +1 до сухого хода. Трудно сказать, не видя выход, а что вы делаете и не хотите удалять, я угадываю, что вы проехали местоположение / и т. Д., Но просто предположение. Обновите свой вопрос или используйте цикл for i in $(locate locate omero) .... – Panther 5 October 2017 в 20:56
  • 3
    я немного смущен. Мне бы хотелось, чтобы удалить все, что показывает locate, но не дополнительные файлы, найденные found, как показано выше, я не хотел бы удалять. Есть ли способ удалить найденные файлы только через локализацию – Max 5 October 2017 в 21:03
  • 4
    Посмотрите на петли bash tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html . for i in $(locate omero) ; do rm $i ; done. Может возникнуть проблема с пробелами в именах файлов и т. Д., Но этого достаточно. ИЛИ уточните свою находку, уточнив параметры поиска или путь поиска, трудно сказать, из какого количества вы разместили сообщение. – Panther 5 October 2017 в 21:13
  • 5
    locate может выполнять вывод с нулевым завершением, поэтому вместо for i in $(locate ...); locate -0 ... | xargs -0 ... было бы лучше. – muru 6 October 2017 в 03:56

Используйте sudo

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

sudo find -type f -name '*omero*'

Затем, если список выглядит хорошо

sudo find -type f -name '*omero*' -delete

или указать местоположение для поиска (вы уже знаете, что эти файлы находятся в / etc)

sudo find /etc -iname '*omero*' -delete

-delete быстрее, чем -exec rm {} \; или -print0 | xargs -0 rm, поскольку он не должен порождать другой процесс.

EDIT: Из комментариев

for i in $(locate omero) ; do rm $i ; done
4
ответ дан 18 July 2018 в 05:43

Используйте sudo

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

sudo find -type f -name '*omero*'

Затем, если список выглядит хорошо

sudo find -type f -name '*omero*' -delete

или указать местоположение для поиска (вы уже знаете, что эти файлы находятся в / etc)

sudo find /etc -iname '*omero*' -delete

-delete быстрее, чем -exec rm {} \; или -print0 | xargs -0 rm, поскольку он не должен порождать другой процесс.

EDIT: Из комментариев

for i in $(locate omero) ; do rm $i ; done
4
ответ дан 24 July 2018 в 18:25

Вам просто нужно добавить sudo к вашей команде:

sudo find /etc -type f -name '*omero*' -delete

, и ошибка исчезнет. Причина в том, что эти файлы принадлежат root user и могут быть удалены только теми, кто находится в группе sudo и root.

3
ответ дан 22 May 2018 в 17:49
  • 1
    Ну, технически может быть удален только root, а пользователи в группе sudo могут запускать команду как root. Команда не будет работать без sudo, даже если вы находитесь в группе sudo. – Panther 5 October 2017 в 20:20

Существует много причин использовать find, а не rm. Особенно если ваша версия find поддерживает параметр «-delete»:

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

Если ваш поиск поддерживает «-delete»:

find -type f -path "*omero*" -delete

Если ваш поиск не поддерживает «-delete» и требует пусковой путь:

find . -type f -path "*omero*" -print0 | xargs -0 rm

Это важно -print0 ... -0. Это говорит find для вывода имен файлов, ограниченных NUL, а xargs -0 будет ожидать NUL-разделенных имен файлов. Таким образом, пробелы и символы новой строки в ваших именах не вызовут проблем.

Кроме того, я использую -path вместо -name, чтобы более точно сопоставить то, что дает вам «locate». Однако это означает, что файл будет удален, если он окажется под каталогом с «omero» в нем. Это, вероятно, не то, что вы хотите, и вместо этого вы должны использовать -name.

Если вы не уверены в том, что у вас есть, положите sudo на перед первой версией. Или sudo спереди find и xargs во второй.

1
ответ дан 22 May 2018 в 17:49
  • 1
    Как насчет -exec rm -i {} +? Я думаю, что это хорошая идея просить каждый файл, прежде чем удалять его здесь ... – dessert 6 October 2017 в 01:24
  • 2
    @dessert Я не знал о вариации {} +! Спасибо! – Chris Cogdon 7 October 2017 в 02:45

Существует много причин использовать find, а не rm. Особенно если ваша версия find поддерживает параметр «-delete»:

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

Если ваш поиск поддерживает «-delete»:

find -type f -path "*omero*" -delete

Если ваш поиск не поддерживает «-delete» и требует пусковой путь:

find . -type f -path "*omero*" -print0 | xargs -0 rm

Это важно -print0 ... -0. Это говорит find для вывода имен файлов, ограниченных NUL, а xargs -0 будет ожидать NUL-разделенных имен файлов. Таким образом, пробелы и символы новой строки в ваших именах не вызовут проблем.

Кроме того, я использую -path вместо -name, чтобы более точно сопоставить то, что дает вам «locate». Однако это означает, что файл будет удален, если он окажется под каталогом с «omero» в нем. Это, вероятно, не то, что вы хотите, и вместо этого вы должны использовать -name.

Если вы не уверены в том, что у вас есть, положите sudo на перед первой версией. Или sudo спереди find и xargs во второй.

1
ответ дан 18 July 2018 в 05:43

Вам просто нужно добавить sudo к вашей команде:

sudo find /etc -type f -name '*omero*' -delete

, и ошибка исчезнет. Причина в том, что эти файлы принадлежат root user и могут быть удалены только теми, кто находится в группе sudo и root.

3
ответ дан 18 July 2018 в 05:43

Существует много причин использовать find, а не rm. Особенно если ваша версия find поддерживает параметр «-delete»:

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

Если ваш поиск поддерживает «-delete»:

find -type f -path "*omero*" -delete

Если ваш поиск не поддерживает «-delete» и требует пусковой путь:

find . -type f -path "*omero*" -print0 | xargs -0 rm

Это важно -print0 ... -0. Это говорит find для вывода имен файлов, ограниченных NUL, а xargs -0 будет ожидать NUL-разделенных имен файлов. Таким образом, пробелы и символы новой строки в ваших именах не вызовут проблем.

Кроме того, я использую -path вместо -name, чтобы более точно сопоставить то, что дает вам «locate». Однако это означает, что файл будет удален, если он окажется под каталогом с «omero» в нем. Это, вероятно, не то, что вы хотите, и вместо этого вы должны использовать -name.

Если вы не уверены в том, что у вас есть, положите sudo на перед первой версией. Или sudo спереди find и xargs во второй.

1
ответ дан 24 July 2018 в 18:25
  • 1
    Как насчет -exec rm -i {} +? Я думаю, что это хорошая идея просить каждый файл, прежде чем удалять его здесь ... – dessert 6 October 2017 в 01:24
  • 2
    @dessert Я не знал о вариации {} +! Спасибо! – Chris Cogdon 7 October 2017 в 02:45

Вам просто нужно добавить sudo к вашей команде:

sudo find /etc -type f -name '*omero*' -delete

, и ошибка исчезнет. Причина в том, что эти файлы принадлежат root user и могут быть удалены только теми, кто находится в группе sudo и root.

3
ответ дан 24 July 2018 в 18:25
  • 1
    Ну, технически может быть удален только root, а пользователи в группе sudo могут запускать команду как root. Команда не будет работать без sudo, даже если вы находитесь в группе sudo. – Panther 5 October 2017 в 20:20

Другие вопросы по тегам:

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