Что 'rm -r ~' сделал с моим домашним каталогом?

gedit создает скрытые файлы резервных копий, заканчивающиеся на '~'. Я хотел сделать рекурсивную очистку моего дерева каталогов.

Команда rm *~ удалит все локальные файлы, заканчивающиеся на '~'

Я думал, rm -r *~ . удалит все файлы во всем дереве, но я опечатал rm -r ~.

Было сообщение, что не удалось удалить какой-либо каталог, и я вышел из команды. Вопрос в том, что я удаляю?

Я заметил, что моя конфигурация Filezilla пропала. Удаляет ли эта команда все скрытые каталоги из домашнего каталога?

16
задан 29 June 2012 в 13:58

17 ответов

Вы удалили (почти) весь свой домашний каталог!

rm -r something рекурсивно удаляет файлы и каталоги в / под что-то ; он потерпит неудачу только на элементах, для которых у него нет разрешения на удаление, либо потому, что они принадлежат другому пользователю (например, root), либо потому, что они используются (например, монтирование GVFS).

Если вы не добавили -f (как в rm -rf something), вы получите что-то вроде:

rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?

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

Предложения сообщества о том, как избежать подобных аварий

Примечание. Вики сообщества, каждый может принять участие.

  • Для нескольких файлов используйте опцию -i, чтобы получить подтверждение об удалении файлов или каталогов:
    $ rm -ri something/
    rm: remove regular file ‘something/file~’? y
    rm: descend into directory ‘something’? y
    rm: remove regular file ‘something/file’? y
    rm: remove directory ‘something’? y
    
  • При удалении из текущего каталога используйте префикс это с помощью ./, чтобы избежать ошибочного удаления другого местоположения .:
    $ cd something
    $ rm -v ./*~
    removed ‘./file~’
    
    Выше было продемонстрировано использование ./. Если есть подкаталог, вы, конечно, также можете использовать rm -v something/*~. Осторожно: не думайте, что rm ./.* удаляет все скрытые файлы в текущем каталоге. См. этот вопрос о Serverfault , чтобы узнать, как обойти скрытые файлы.
  • Переместить, а не удалить: вместо рекурсивного удаления файлов, в первую очередь я привык перемещать файлы, от которых я хочу избавиться, прежде чем окончательно удалить их. Если что-то пошло не так, его легко восстановить.
    mv -b SOURCE DEST
    
  • Используйте find (возможно, с grep) для предварительного просмотра , если вы хотите рекурсивно удалить выбранные файлы. Вы должны попытаться сделать это редким случаем, но если вам нужно ... find без аргументов рекурсивно перечисляет все файлы / каталоги под текущим. Вы должны попытаться найти man find о том, как сделать его выборочным (сокровищница), но если вы не хотите беспокоиться, вы можете просто использовать знакомый grep для фильтрации файлов, которые вы хотите удалить. Предположим, я хакер ядра uber-l33t, и меня беспокоит несколько килобайт "примеров" файлов в моем исходном дереве; Я хочу удалить все файлы, содержащие это имя. Поэтому я набираю find | grep example, что дает мне эти 20 файлов. Это выглядит неплохо, поэтому сейчас я иду и удаляю эти точные файлы вместе с ранее упомянутым подробным выводом rm -v через xargs :
    find | grep example | xargs rm -v
    который дает мне этот вывод. Такой предварительный просмотр предотвращает проблемы, где, например, вы делаете опечатку и печатаете sample вместо example.

Приведенное выше решение не следует использовать, если у вас могут быть имена файлов, содержащие пробелы, символы табуляции, новые строки или кавычки (" или '), поскольку это приведет к xargs либо потерпеть неудачу, либо передать rm неполные имена файлов, что в худшем случае может привести к удалению неправильных файлов. Безопасный способ сделать это - сделать все это с помощью операторов и действий find.

Далее будут показаны все файлы, содержащие слово example

find . -name "*example*"  

Если этот список содержит файлы, которые вы хотите удалить, используйте действие -exec, чтобы передать файлы в rm.

find . -name "*example*" -exec rm -v {} +

См. Использование Find для получения дополнительной информации. помогите с использованием find.

31
ответ дан 25 July 2018 в 18:15

Вы удалили (почти) весь свой домашний каталог!

rm -r something рекурсивно удаляет файлы и каталоги в / под что-то ; он потерпит неудачу только на элементах, для которых у него нет разрешения на удаление, либо потому, что они принадлежат другому пользователю (например, root), либо потому, что они используются (например, монтирование GVFS).

Если вы не добавили -f (как в rm -rf something), вы получите что-то вроде:

rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?

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

Предложения сообщества о том, как избежать подобных аварий

Примечание. Вики сообщества, каждый может принять участие.

  • Для нескольких файлов используйте опцию -i, чтобы получить подтверждение об удалении файлов или каталогов:
    $ rm -ri something/
    rm: remove regular file ‘something/file~’? y
    rm: descend into directory ‘something’? y
    rm: remove regular file ‘something/file’? y
    rm: remove directory ‘something’? y
    
  • При удалении из текущего каталога используйте префикс это с помощью ./, чтобы избежать ошибочного удаления другого местоположения .:
    $ cd something
    $ rm -v ./*~
    removed ‘./file~’
    
    Выше было продемонстрировано использование ./. Если есть подкаталог, вы, конечно, также можете использовать rm -v something/*~. Осторожно: не думайте, что rm ./.* удаляет все скрытые файлы в текущем каталоге. См. этот вопрос о Serverfault , чтобы узнать, как обойти скрытые файлы.
  • Переместить, а не удалить: вместо рекурсивного удаления файлов, в первую очередь я привык перемещать файлы, от которых я хочу избавиться, прежде чем окончательно удалить их. Если что-то пошло не так, его легко восстановить.
    mv -b SOURCE DEST
    
  • Используйте find (возможно, с grep) для предварительного просмотра , если вы хотите рекурсивно удалить выбранные файлы. Вы должны попытаться сделать это редким случаем, но если вам нужно ... find без аргументов рекурсивно перечисляет все файлы / каталоги под текущим. Вы должны попытаться найти man find о том, как сделать его выборочным (сокровищница), но если вы не хотите беспокоиться, вы можете просто использовать знакомый grep для фильтрации файлов, которые вы хотите удалить. Предположим, я хакер ядра uber-l33t, и меня беспокоит несколько килобайт "примеров" файлов в моем исходном дереве; Я хочу удалить все файлы, содержащие это имя. Поэтому я набираю find | grep example, что дает мне эти 20 файлов. Это выглядит неплохо, поэтому сейчас я иду и удаляю эти точные файлы вместе с ранее упомянутым подробным выводом rm -v через xargs :
    find | grep example | xargs rm -v
    который дает мне этот вывод. Такой предварительный просмотр предотвращает проблемы, где, например, вы делаете опечатку и печатаете sample вместо example.

Приведенное выше решение не следует использовать, если у вас могут быть имена файлов, содержащие пробелы, символы табуляции, новые строки или кавычки (" или '), поскольку это приведет к xargs либо потерпеть неудачу, либо передать rm неполные имена файлов, что в худшем случае может привести к удалению неправильных файлов. Безопасный способ сделать это - сделать все это с помощью операторов и действий find.

Далее будут показаны все файлы, содержащие слово example

find . -name "*example*"  

Если этот список содержит файлы, которые вы хотите удалить, используйте действие -exec, чтобы передать файлы в rm.

find . -name "*example*" -exec rm -v {} +

См. Использование Find для получения дополнительной информации. помогите с использованием find.

31
ответ дан 31 July 2018 в 11:42

Вы удалили (почти) весь свой домашний каталог!

rm -r something рекурсивно удаляет файлы и каталоги в / под что-то ; он потерпит неудачу только на элементах, для которых у него нет разрешения на удаление, либо потому, что они принадлежат другому пользователю (например, root), либо потому, что они используются (например, монтирование GVFS).

Если вы не добавили -f (как в rm -rf something), вы получите что-то вроде:

rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?

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

Предложения сообщества о том, как избежать подобных аварий

Примечание. Вики сообщества, каждый может принять участие.

  • Для нескольких файлов используйте опцию -i, чтобы получить подтверждение об удалении файлов или каталогов:
    $ rm -ri something/
    rm: remove regular file ‘something/file~’? y
    rm: descend into directory ‘something’? y
    rm: remove regular file ‘something/file’? y
    rm: remove directory ‘something’? y
    
  • При удалении из текущего каталога используйте префикс это с помощью ./, чтобы избежать ошибочного удаления другого местоположения .:
    $ cd something
    $ rm -v ./*~
    removed ‘./file~’
    
    Выше было продемонстрировано использование ./. Если есть подкаталог, вы, конечно, также можете использовать rm -v something/*~. Осторожно: не думайте, что rm ./.* удаляет все скрытые файлы в текущем каталоге. См. этот вопрос о Serverfault , чтобы узнать, как обойти скрытые файлы.
  • Переместить, а не удалить: вместо рекурсивного удаления файлов, в первую очередь я привык перемещать файлы, от которых я хочу избавиться, прежде чем окончательно удалить их. Если что-то пошло не так, его легко восстановить.
    mv -b SOURCE DEST
    
  • Используйте find (возможно, с grep) для предварительного просмотра , если вы хотите рекурсивно удалить выбранные файлы. Вы должны попытаться сделать это редким случаем, но если вам нужно ... find без аргументов рекурсивно перечисляет все файлы / каталоги под текущим. Вы должны попытаться найти man find о том, как сделать его выборочным (сокровищница), но если вы не хотите беспокоиться, вы можете просто использовать знакомый grep для фильтрации файлов, которые вы хотите удалить. Предположим, я хакер ядра uber-l33t, и меня беспокоит несколько килобайт "примеров" файлов в моем исходном дереве; Я хочу удалить все файлы, содержащие это имя. Поэтому я набираю find | grep example, что дает мне эти 20 файлов. Это выглядит неплохо, поэтому сейчас я иду и удаляю эти точные файлы вместе с ранее упомянутым подробным выводом rm -v через xargs :
    find | grep example | xargs rm -v
    который дает мне этот вывод. Такой предварительный просмотр предотвращает проблемы, где, например, вы делаете опечатку и печатаете sample вместо example.

Приведенное выше решение не следует использовать, если у вас могут быть имена файлов, содержащие пробелы, символы табуляции, новые строки или кавычки (" или '), поскольку это приведет к xargs либо потерпеть неудачу, либо передать rm неполные имена файлов, что в худшем случае может привести к удалению неправильных файлов. Безопасный способ сделать это - сделать все это с помощью операторов и действий find.

Далее будут показаны все файлы, содержащие слово example

find . -name "*example*"  

Если этот список содержит файлы, которые вы хотите удалить, используйте действие -exec, чтобы передать файлы в rm.

find . -name "*example*" -exec rm -v {} +

См. Использование Find для получения дополнительной информации. помогите с использованием find.

31
ответ дан 2 August 2018 в 00:29

Вы удалили (почти) весь свой домашний каталог!

rm -r something рекурсивно удаляет файлы и каталоги в / под что-то ; он потерпит неудачу только на элементах, для которых у него нет разрешения на удаление, либо потому, что они принадлежат другому пользователю (например, root), либо потому, что они используются (например, монтирование GVFS).

Если вы не добавили -f (как в rm -rf something), вы получите что-то вроде:

rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?

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

Предложения сообщества о том, как избежать подобных аварий

Примечание. Вики сообщества, каждый может принять участие.

  • Для нескольких файлов используйте опцию -i, чтобы получить подтверждение об удалении файлов или каталогов:
    $ rm -ri something/
    rm: remove regular file ‘something/file~’? y
    rm: descend into directory ‘something’? y
    rm: remove regular file ‘something/file’? y
    rm: remove directory ‘something’? y
    
  • При удалении из текущего каталога используйте префикс это с помощью ./, чтобы избежать ошибочного удаления другого местоположения .:
    $ cd something
    $ rm -v ./*~
    removed ‘./file~’
    
    Выше было продемонстрировано использование ./. Если есть подкаталог, вы, конечно, также можете использовать rm -v something/*~. Осторожно: не думайте, что rm ./.* удаляет все скрытые файлы в текущем каталоге. См. этот вопрос о Serverfault , чтобы узнать, как обойти скрытые файлы.
  • Переместить, а не удалить: вместо рекурсивного удаления файлов, в первую очередь я привык перемещать файлы, от которых я хочу избавиться, прежде чем окончательно удалить их. Если что-то пошло не так, его легко восстановить.
    mv -b SOURCE DEST
    
  • Используйте find (возможно, с grep) для предварительного просмотра , если вы хотите рекурсивно удалить выбранные файлы. Вы должны попытаться сделать это редким случаем, но если вам нужно ... find без аргументов рекурсивно перечисляет все файлы / каталоги под текущим. Вы должны попытаться найти man find о том, как сделать его выборочным (сокровищница), но если вы не хотите беспокоиться, вы можете просто использовать знакомый grep для фильтрации файлов, которые вы хотите удалить. Предположим, я хакер ядра uber-l33t, и меня беспокоит несколько килобайт "примеров" файлов в моем исходном дереве; Я хочу удалить все файлы, содержащие это имя. Поэтому я набираю find | grep example, что дает мне эти 20 файлов. Это выглядит неплохо, поэтому сейчас я иду и удаляю эти точные файлы вместе с ранее упомянутым подробным выводом rm -v через xargs :
    find | grep example | xargs rm -v
    который дает мне этот вывод. Такой предварительный просмотр предотвращает проблемы, где, например, вы делаете опечатку и печатаете sample вместо example.

Приведенное выше решение не следует использовать, если у вас могут быть имена файлов, содержащие пробелы, символы табуляции, новые строки или кавычки (" или '), поскольку это приведет к xargs либо потерпеть неудачу, либо передать rm неполные имена файлов, что в худшем случае может привести к удалению неправильных файлов. Безопасный способ сделать это - сделать все это с помощью операторов и действий find.

Далее будут показаны все файлы, содержащие слово example

find . -name "*example*"  

Если этот список содержит файлы, которые вы хотите удалить, используйте действие -exec, чтобы передать файлы в rm.

find . -name "*example*" -exec rm -v {} +

См. Использование Find для получения дополнительной информации. помогите с использованием find.

31
ответ дан 4 August 2018 в 15:58

Вы удалили (почти) весь свой домашний каталог!

rm -r something рекурсивно удаляет файлы и каталоги в / под что-то ; он потерпит неудачу только на элементах, для которых у него нет разрешения на удаление, либо потому, что они принадлежат другому пользователю (например, root), либо потому, что они используются (например, монтирование GVFS).

Если вы не добавили -f (как в rm -rf something), вы получите что-то вроде:

rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?

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

Предложения сообщества о том, как избежать подобных аварий

Примечание. Вики сообщества, каждый может принять участие.

  • Для нескольких файлов используйте опцию -i, чтобы получить подтверждение об удалении файлов или каталогов:
    $ rm -ri something/
    rm: remove regular file ‘something/file~’? y
    rm: descend into directory ‘something’? y
    rm: remove regular file ‘something/file’? y
    rm: remove directory ‘something’? y
    
  • При удалении из текущего каталога используйте префикс это с помощью ./, чтобы избежать ошибочного удаления другого местоположения .:
    $ cd something
    $ rm -v ./*~
    removed ‘./file~’
    
    Выше было продемонстрировано использование ./. Если есть подкаталог, вы, конечно, также можете использовать rm -v something/*~. Осторожно: не думайте, что rm ./.* удаляет все скрытые файлы в текущем каталоге. См. этот вопрос о Serverfault , чтобы узнать, как обойти скрытые файлы.
  • Переместить, а не удалить: вместо рекурсивного удаления файлов, в первую очередь я привык перемещать файлы, от которых я хочу избавиться, прежде чем окончательно удалить их. Если что-то пошло не так, его легко восстановить.
    mv -b SOURCE DEST
    
  • Используйте find (возможно, с grep) для предварительного просмотра , если вы хотите рекурсивно удалить выбранные файлы. Вы должны попытаться сделать это редким случаем, но если вам нужно ... find без аргументов рекурсивно перечисляет все файлы / каталоги под текущим. Вы должны попытаться найти man find о том, как сделать его выборочным (сокровищница), но если вы не хотите беспокоиться, вы можете просто использовать знакомый grep для фильтрации файлов, которые вы хотите удалить. Предположим, я хакер ядра uber-l33t, и меня беспокоит несколько килобайт "примеров" файлов в моем исходном дереве; Я хочу удалить все файлы, содержащие это имя. Поэтому я набираю find | grep example, что дает мне эти 20 файлов. Это выглядит неплохо, поэтому сейчас я иду и удаляю эти точные файлы вместе с ранее упомянутым подробным выводом rm -v через xargs :
    find | grep example | xargs rm -v
    который дает мне этот вывод. Такой предварительный просмотр предотвращает проблемы, где, например, вы делаете опечатку и печатаете sample вместо example.

Приведенное выше решение не следует использовать, если у вас могут быть имена файлов, содержащие пробелы, символы табуляции, новые строки или кавычки (" или '), поскольку это приведет к xargs либо потерпеть неудачу, либо передать rm неполные имена файлов, что в худшем случае может привести к удалению неправильных файлов. Безопасный способ сделать это - сделать все это с помощью операторов и действий find.

Далее будут показаны все файлы, содержащие слово example

find . -name "*example*"  

Если этот список содержит файлы, которые вы хотите удалить, используйте действие -exec, чтобы передать файлы в rm.

find . -name "*example*" -exec rm -v {} +

См. Использование Find для получения дополнительной информации. помогите с использованием find.

31
ответ дан 6 August 2018 в 00:36

Вы удалили (почти) весь свой домашний каталог!

rm -r something рекурсивно удаляет файлы и каталоги в / под что-то ; он потерпит неудачу только на элементах, для которых у него нет разрешения на удаление, либо потому, что они принадлежат другому пользователю (например, root), либо потому, что они используются (например, монтирование GVFS).

Если вы не добавили -f (как в rm -rf something), вы получите что-то вроде:

rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?

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

Предложения сообщества о том, как избежать подобных аварий

Примечание. Вики сообщества, каждый может принять участие.

  • Для нескольких файлов используйте опцию -i, чтобы получить подтверждение об удалении файлов или каталогов:
    $ rm -ri something/
    rm: remove regular file ‘something/file~’? y
    rm: descend into directory ‘something’? y
    rm: remove regular file ‘something/file’? y
    rm: remove directory ‘something’? y
    
  • При удалении из текущего каталога используйте префикс это с помощью ./, чтобы избежать ошибочного удаления другого местоположения .:
    $ cd something
    $ rm -v ./*~
    removed ‘./file~’
    
    Выше было продемонстрировано использование ./. Если есть подкаталог, вы, конечно, также можете использовать rm -v something/*~. Осторожно: не думайте, что rm ./.* удаляет все скрытые файлы в текущем каталоге. См. этот вопрос о Serverfault , чтобы узнать, как обойти скрытые файлы.
  • Переместить, а не удалить: вместо рекурсивного удаления файлов, в первую очередь я привык перемещать файлы, от которых я хочу избавиться, прежде чем окончательно удалить их. Если что-то пошло не так, его легко восстановить.
    mv -b SOURCE DEST
    
  • Используйте find (возможно, с grep) для предварительного просмотра , если вы хотите рекурсивно удалить выбранные файлы. Вы должны попытаться сделать это редким случаем, но если вам нужно ... find без аргументов рекурсивно перечисляет все файлы / каталоги под текущим. Вы должны попытаться найти man find о том, как сделать его выборочным (сокровищница), но если вы не хотите беспокоиться, вы можете просто использовать знакомый grep для фильтрации файлов, которые вы хотите удалить. Предположим, я хакер ядра uber-l33t, и меня беспокоит несколько килобайт "примеров" файлов в моем исходном дереве; Я хочу удалить все файлы, содержащие это имя. Поэтому я набираю find | grep example, что дает мне эти 20 файлов. Это выглядит неплохо, поэтому сейчас я иду и удаляю эти точные файлы вместе с ранее упомянутым подробным выводом rm -v через xargs :
    find | grep example | xargs rm -v
    который дает мне этот вывод. Такой предварительный просмотр предотвращает проблемы, где, например, вы делаете опечатку и печатаете sample вместо example.

Приведенное выше решение не следует использовать, если у вас могут быть имена файлов, содержащие пробелы, символы табуляции, новые строки или кавычки (" или '), поскольку это приведет к xargs либо потерпеть неудачу, либо передать rm неполные имена файлов, что в худшем случае может привести к удалению неправильных файлов. Безопасный способ сделать это - сделать все это с помощью операторов и действий find.

Далее будут показаны все файлы, содержащие слово example

find . -name "*example*"  

Если этот список содержит файлы, которые вы хотите удалить, используйте действие -exec, чтобы передать файлы в rm.

find . -name "*example*" -exec rm -v {} +

См. Использование Find для получения дополнительной информации. помогите с использованием find.

31
ответ дан 7 August 2018 в 18:02

Вы удалили (почти) весь свой домашний каталог!

rm -r something рекурсивно удаляет файлы и каталоги в / под что-то ; он потерпит неудачу только на элементах, для которых у него нет разрешения на удаление, либо потому, что они принадлежат другому пользователю (например, root), либо потому, что они используются (например, монтирование GVFS).

Если вы не добавили -f (как в rm -rf something), вы получите что-то вроде:

rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?

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

Предложения сообщества о том, как избежать подобных аварий

Примечание. Вики сообщества, каждый может принять участие.

  • Для нескольких файлов используйте опцию -i, чтобы получить подтверждение об удалении файлов или каталогов:
    $ rm -ri something/
    rm: remove regular file ‘something/file~’? y
    rm: descend into directory ‘something’? y
    rm: remove regular file ‘something/file’? y
    rm: remove directory ‘something’? y
    
  • При удалении из текущего каталога используйте префикс это с помощью ./, чтобы избежать ошибочного удаления другого местоположения .:
    $ cd something
    $ rm -v ./*~
    removed ‘./file~’
    
    Выше было продемонстрировано использование ./. Если есть подкаталог, вы, конечно, также можете использовать rm -v something/*~. Осторожно: не думайте, что rm ./.* удаляет все скрытые файлы в текущем каталоге. См. этот вопрос о Serverfault , чтобы узнать, как обойти скрытые файлы.
  • Переместить, а не удалить: вместо рекурсивного удаления файлов, в первую очередь я привык перемещать файлы, от которых я хочу избавиться, прежде чем окончательно удалить их. Если что-то пошло не так, его легко восстановить.
    mv -b SOURCE DEST
    
  • Используйте find (возможно, с grep) для предварительного просмотра , если вы хотите рекурсивно удалить выбранные файлы. Вы должны попытаться сделать это редким случаем, но если вам нужно ... find без аргументов рекурсивно перечисляет все файлы / каталоги под текущим. Вы должны попытаться найти man find о том, как сделать его выборочным (сокровищница), но если вы не хотите беспокоиться, вы можете просто использовать знакомый grep для фильтрации файлов, которые вы хотите удалить. Предположим, я хакер ядра uber-l33t, и меня беспокоит несколько килобайт "примеров" файлов в моем исходном дереве; Я хочу удалить все файлы, содержащие это имя. Поэтому я набираю find | grep example, что дает мне эти 20 файлов. Это выглядит неплохо, поэтому сейчас я иду и удаляю эти точные файлы вместе с ранее упомянутым подробным выводом rm -v через xargs :
    find | grep example | xargs rm -v
    который дает мне этот вывод. Такой предварительный просмотр предотвращает проблемы, где, например, вы делаете опечатку и печатаете sample вместо example.

Приведенное выше решение не следует использовать, если у вас могут быть имена файлов, содержащие пробелы, символы табуляции, новые строки или кавычки (" или '), поскольку это приведет к xargs либо потерпеть неудачу, либо передать rm неполные имена файлов, что в худшем случае может привести к удалению неправильных файлов. Безопасный способ сделать это - сделать все это с помощью операторов и действий find.

Далее будут показаны все файлы, содержащие слово example

find . -name "*example*"  

Если этот список содержит файлы, которые вы хотите удалить, используйте действие -exec, чтобы передать файлы в rm.

find . -name "*example*" -exec rm -v {} +

См. Использование Find для получения дополнительной информации. помогите с использованием find.

31
ответ дан 10 August 2018 в 06:50

Вы удалили (почти) весь свой домашний каталог!

rm -r something рекурсивно удаляет файлы и каталоги в / под что-то ; он потерпит неудачу только на элементах, для которых у него нет разрешения на удаление, либо потому, что они принадлежат другому пользователю (например, root), либо потому, что они используются (например, монтирование GVFS).

Если вы не добавили -f (как в rm -rf something), вы получите что-то вроде:

rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?

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

Предложения сообщества о том, как избежать подобных аварий

Примечание. Вики сообщества, каждый может принять участие.

  • Для нескольких файлов используйте опцию -i, чтобы получить подтверждение об удалении файлов или каталогов:
    $ rm -ri something/
    rm: remove regular file ‘something/file~’? y
    rm: descend into directory ‘something’? y
    rm: remove regular file ‘something/file’? y
    rm: remove directory ‘something’? y
    
  • При удалении из текущего каталога используйте префикс это с помощью ./, чтобы избежать ошибочного удаления другого местоположения .:
    $ cd something
    $ rm -v ./*~
    removed ‘./file~’
    
    Выше было продемонстрировано использование ./. Если есть подкаталог, вы, конечно, также можете использовать rm -v something/*~. Осторожно: не думайте, что rm ./.* удаляет все скрытые файлы в текущем каталоге. См. этот вопрос о Serverfault , чтобы узнать, как обойти скрытые файлы.
  • Переместить, а не удалить: вместо рекурсивного удаления файлов, в первую очередь я привык перемещать файлы, от которых я хочу избавиться, прежде чем окончательно удалить их. Если что-то пошло не так, его легко восстановить.
    mv -b SOURCE DEST
    
  • Используйте find (возможно, с grep) для предварительного просмотра , если вы хотите рекурсивно удалить выбранные файлы. Вы должны попытаться сделать это редким случаем, но если вам нужно ... find без аргументов рекурсивно перечисляет все файлы / каталоги под текущим. Вы должны попытаться найти man find о том, как сделать его выборочным (сокровищница), но если вы не хотите беспокоиться, вы можете просто использовать знакомый grep для фильтрации файлов, которые вы хотите удалить. Предположим, я хакер ядра uber-l33t, и меня беспокоит несколько килобайт "примеров" файлов в моем исходном дереве; Я хочу удалить все файлы, содержащие это имя. Поэтому я набираю find | grep example, что дает мне эти 20 файлов. Это выглядит неплохо, поэтому сейчас я иду и удаляю эти точные файлы вместе с ранее упомянутым подробным выводом rm -v через xargs :
    find | grep example | xargs rm -v
    который дает мне этот вывод. Такой предварительный просмотр предотвращает проблемы, где, например, вы делаете опечатку и печатаете sample вместо example.

Приведенное выше решение не следует использовать, если у вас могут быть имена файлов, содержащие пробелы, символы табуляции, новые строки или кавычки (" или '), поскольку это приведет к xargs либо потерпеть неудачу, либо передать rm неполные имена файлов, что в худшем случае может привести к удалению неправильных файлов. Безопасный способ сделать это - сделать все это с помощью операторов и действий find.

Далее будут показаны все файлы, содержащие слово example

find . -name "*example*"  

Если этот список содержит файлы, которые вы хотите удалить, используйте действие -exec, чтобы передать файлы в rm.

find . -name "*example*" -exec rm -v {} +

См. Использование Find для получения дополнительной информации. помогите с использованием find.

31
ответ дан 15 August 2018 в 18:46
  • 1
    Передача выходных данных find на grep и xargs rm опасна. – geirha 29 June 2012 в 14:00
  • 2
    @izx: добавлено mv (моя любимая команда);) – Takkat 29 June 2012 в 14:35
  • 3
    Я бы хотя бы добавил пример использования find безопасного способа, который не ломается (и, возможно, удаляет неправильные файлы), если имена файлов содержат пробел, символы табуляции, новой строки, " или '. Например. find . -name "*example*" -exec rm -v {} +. mywiki.wooledge.org/UsingFind – geirha 29 June 2012 в 15:45
  • 4
    @geirha: почему find -delete так опасно? Я бы сказал что-то здесь, но я не знаю, кроме того, что он недавно нашел и стер мой /, несмотря на то, что при пробном запуске без опции -delete было найдено только несколько файлов, которые я хотел удалить. Я вижу, что вы рекомендуете -exec rm вместо этого. – Takkat 30 June 2012 в 15:25
  • 5
    @Takkat -delete не опасен, и вы можете смело использовать его вместо -exec rm {} +. Я обычно предпочитаю использовать стандартные инструменты и функции, когда это возможно. -delete - это нестандартное расширение GNU для find, поэтому оно будет нормально работать в Ubuntu, но может не работать в других системах. – geirha 30 June 2012 в 15:35
Да. Некорректный тильда-персонаж как отдельный аргумент расширяется до вашего homedir. Таким образом, rm -r ~ расширился до rm -r /home/yourusename. Поэтому вы сказали rm рекурсивно удалить все файлы в вашем homedir.

См. Http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion для получения дополнительной информации о том, как расширение тильды работы.

5
ответ дан 25 May 2018 в 09:22

Да. Тильда без кавычек в качестве отдельного аргумента распространяется на ваш домашний каталог. Итак, rm -r ~ расширен до rm -r /home/yourusename. Итак, вы сказали rm рекурсивно удалить все файлы в вашем домашнем каталоге.

См. http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion подробнее о том, как работает расширение тильды.

5
ответ дан 25 July 2018 в 18:15

Да. Тильда без кавычек в качестве отдельного аргумента распространяется на ваш домашний каталог. Итак, rm -r ~ расширен до rm -r /home/yourusename. Итак, вы сказали rm рекурсивно удалить все файлы в вашем домашнем каталоге.

См. http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion подробнее о том, как работает расширение тильды.

5
ответ дан 31 July 2018 в 11:42

Да. Тильда без кавычек в качестве отдельного аргумента распространяется на ваш домашний каталог. Итак, rm -r ~ расширен до rm -r /home/yourusename. Итак, вы сказали rm рекурсивно удалить все файлы в вашем домашнем каталоге.

См. http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion подробнее о том, как работает расширение тильды.

5
ответ дан 2 August 2018 в 00:29

Да. Тильда без кавычек в качестве отдельного аргумента распространяется на ваш домашний каталог. Итак, rm -r ~ расширен до rm -r /home/yourusename. Итак, вы сказали rm рекурсивно удалить все файлы в вашем домашнем каталоге.

См. http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion подробнее о том, как работает расширение тильды.

5
ответ дан 4 August 2018 в 15:58

Да. Тильда без кавычек в качестве отдельного аргумента распространяется на ваш домашний каталог. Итак, rm -r ~ расширен до rm -r /home/yourusename. Итак, вы сказали rm рекурсивно удалить все файлы в вашем домашнем каталоге.

См. http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion подробнее о том, как работает расширение тильды.

5
ответ дан 6 August 2018 в 00:36

Да. Тильда без кавычек в качестве отдельного аргумента распространяется на ваш домашний каталог. Итак, rm -r ~ расширен до rm -r /home/yourusename. Итак, вы сказали rm рекурсивно удалить все файлы в вашем домашнем каталоге.

См. http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion подробнее о том, как работает расширение тильды.

5
ответ дан 7 August 2018 в 18:02

Да. Тильда без кавычек в качестве отдельного аргумента распространяется на ваш домашний каталог. Итак, rm -r ~ расширен до rm -r /home/yourusename. Итак, вы сказали rm рекурсивно удалить все файлы в вашем домашнем каталоге.

См. http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion подробнее о том, как работает расширение тильды.

5
ответ дан 10 August 2018 в 06:50

Да. Тильда без кавычек в качестве отдельного аргумента распространяется на ваш домашний каталог. Итак, rm -r ~ расширен до rm -r /home/yourusename. Итак, вы сказали rm рекурсивно удалить все файлы в вашем домашнем каталоге.

См. http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion подробнее о том, как работает расширение тильды.

5
ответ дан 15 August 2018 в 18:46

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

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