Gedit создает скрытые файлы резервных копий, оканчивающиеся на '~'. Я хотел сделать рекурсивную очистку моего дерева каталогов.
Команда rm *~
удалит все локальные файлы, заканчивающиеся на '~'
Я думал rm -r *~ .
, удалит все файлы во всем дереве, но я опечатал rm -r ~
.
Было сообщение, что не удалось удалить какой-либо каталог, и я вышел из команды. Вопрос в том, что я удаляю?
Я заметил, что моя конфигурация Filezilla исчезла. Удаляет ли эта команда все скрытые каталоги из домашнего каталога?
command-line
bash
GUI наркоман
источник
источник
-r
если я не хочу избавиться от всего.rm -r *~ .
удалил бы все файлы и папки (в текущем каталоге), соответствующие*~
или.
. (.
будет игнорироватьсяrm
как специальное исключение, так как большинство людей не хотят рекурсивно удалять текущий каталог. The*~
удаляет все файлы и каталоги в текущем каталоге, которые заканчиваются~
, но не файлы и каталоги в подкаталогах текущего каталога. ) Так что это не то, что вы хотели. Возможно, вы захотите использоватьfind
с-exec
флагом рекурсивный просмотр дерева каталогов и без рекурсивного удаления каждого файла, заканчивающегося на~
.~
символ, не выходя из него (например\~
, так:) заставит Bash, ZSH и т. Д. (rm
Команда в основном) думать, что вы имеете в виду домашний каталог.Ответы:
Вы удалили (почти) весь свой домашний каталог!
rm -r something
рекурсивно удаляет файлы и каталоги в / под чем-либо ; он потерпит неудачу только на элементах, для которых у него нет разрешения на удаление, либо потому, что они принадлежат другому пользователю (например,root
), либо потому, что они используются (например, монтируется GVFS).Если вы не добавите
-f
(как в,rm -rf something
), вы получите что-то вроде:В этот момент вы можете прервать работу, и тогда вы, вероятно, поймете, что выполнили неправильную команду.
Предложения сообщества о том, как избежать подобных аварий
Для нескольких файлов используйте
-i
опцию, чтобы получить подтверждение об удалении файлов или каталогов:Если вы удаляете из текущего каталога, добавьте к нему префикс,
./
чтобы избежать ошибочного удаления другого места .:Выше было для демонстрации использования
./
. Если есть подкаталог, вы, конечно, можете его использоватьrm -v something/*~
. Осторожно : не думайте, чтоrm ./.*
удаляет все скрытые файлы в текущем каталоге. Посмотрите этот вопрос о Serverfault для обходных путей для скрытых файлов.Переместить, а не удалить: вместо рекурсивного удаления файлов, во-первых, я привык перемещать файлы, от которых я хочу избавиться, куда-то еще, прежде чем окончательно удалить их. Если что-то пошло не так, его легко восстановить.
Используйте
find
(возможно, сgrep
) для предварительного просмотра, если вы хотите рекурсивно удалить выбранные файлы. Вы должны попытаться сделать это редким явлением, но если вам нужно ...find
без аргументов рекурсивно перечисляет все файлы / каталоги под текущим. Вы должны попытаться выяснить,man find
как сделать его выборочным (сокровищница), но если вы не хотите беспокоиться, вы можете просто использовать знакомыйgrep
для фильтрации файлов, которые вы хотите удалить.find | grep example
, что дает мне эти 20 файлов. Это выглядит хорошо, так что теперь я иду и удаляю эти точные файлы вместе сrm -v
подробным выводом, упомянутым ранее, черезxargs
: который дает мне этот вывод. Такой предварительный просмотр предотвращает проблемы, когда, скажем, вы делаете опечатку и печатаетеsample
вместоexample
.Приведенное выше решение не следует использовать, если у вас могут быть имена файлов, содержащие пробелы, символы табуляции, новые строки или кавычки (
"
или'
), так как это приведетxargs
либоrm
к ошибке , либо к фиду с неполными именами файлов, что в худшем случае может привести к удалению неправильных файлы. Безопасный способ сделать это - сделать всеfind
это с помощью операторов и действий.Ниже будут показаны все файлы, содержащие слово
example
Если этот список содержит файлы, которые вы хотите удалить, используйте
-exec
действие, чтобы передать файлыrm
.См. Использование поиска для получения дополнительной помощи по использованию
find
.источник
find
выходнойgrep
иxargs rm
опасен.mv
(моя любимая команда);)find
безопасного способа, который не ломается (и, возможно, удаляет неправильные файлы), если имена файлов содержат пробел, табуляцию, символ новой строки"
или'
символы. Напримерfind . -name "*example*" -exec rm -v {} +
. mywiki.wooledge.org/UsingFindfind -delete
так опасно? Я бы сказал что-то здесь, но я не знаю, кроме того, что он недавно нашел и стер мой,/
несмотря на пробный запуск без опции,-delete
только нашел несколько файлов, которые я хотел удалить. Я вижу, что вы рекомендуете-exec rm
вместо этого.-delete
не опасен, и вы можете безопасно использовать его вместо-exec rm {} +
. Я обычно предпочитаю использовать стандартные инструменты и функции, когда это возможно.-delete
это нестандартное расширение GNU дляfind
, поэтому оно будет нормально работать в Ubuntu, но может не работать в других системах.Да. Тильда без кавычек в качестве отдельного аргумента распространяется на ваш домашний каталог. Так
rm -r ~
расширился доrm -r /home/yourusename
. Итак, вы сказали rm рекурсивно удалить все файлы в вашем домашнем каталоге.См. Http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion для получения дополнительной информации о том, как работает расширение тильды.
источник