gedit создает скрытые файлы резервных копий, заканчивающиеся на '~'. Я хотел сделать рекурсивную очистку моего дерева каталогов.
Команда rm *~
удалит все локальные файлы, заканчивающиеся на '~'
Я думал, rm -r *~ .
удалит все файлы во всем дереве, но я набрал rm -r ~
.
Было сообщение, что не удалось удалить какой-либо каталог, и я вышел из команды. Вопрос в том, что я удаляю?
Я заметил, что моя конфигурация Filezilla исчезла. Удаляет ли эта команда все скрытые каталоги из домашнего каталога?
rm -r something
рекурсивно удаляет файлы и каталоги в / в что-то ; он потерпит неудачу только на элементах, для которых у него нет разрешения на удаление, либо потому, что они принадлежат другому пользователю (например, root
), либо потому, что они используются (например, монтирование GVFS).
Если бы вы не добавили -f
(как, например, rm -rf something
), вы получите что-то вроде:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
В этот момент вы можете прервать работу, и тогда вы, вероятно, поймете, что выполнили неправильная команда.
Примечание: Вики сообщества, пожалуйста, не стесняйтесь вносить свой вклад.
blockquote>
Для нескольких файлов используйте опцию
-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 ./.*
удаляет все скрытые файлы в текущем каталоге. См. этот вопрос об ошибке сервера для обхода обхода скрытых файлов.Перемещать, а не удалять: Вместо рекурсивного удаления файлов, во-первых, я привык перемещать файлы, от которых я хочу избавиться, прежде чем удалить их наконец. Если что-то пошло не так, его легко восстановить.
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
.
Да. Тильда без кавычек в качестве отдельного аргумента распространяется на ваш домашний каталог. Итак, rm -r ~
расширен до rm -r /home/yourusename
. Итак, вы сказали rm рекурсивно удалить все файлы в вашем домашнем каталоге.
См. http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion для получения дополнительной информации о том, как работает расширение тильды.