Как безопасно удалить все файлы с определенным расширением (например .bak
) из текущего каталога и всех подпапок с помощью одной командной строки? Просто я боюсь использовать, rm
потому что я однажды использовал это неправильно, и теперь мне нужен совет.
command-line
files
rm
batch
user216038
источник
источник
rm *.bak
?rm *.bak
не будете работать для подкаталогов.rm *.bak
будут удалены только все файлы, заканчивающиеся на .bak в текущем каталоге. Чтобы также выполнять действия в подкаталогах, которые вам либо понадобились для работы с глобусами, используйте опцию -r или пример поиска.rm -r *.bak
! Он также удаляет каталоги, заканчивающиеся.bak
всем их содержимым.-delete
это последний аргумент в вашей команде. Если вы поставите его перед-name *.bak
аргументом, он удалит все.источник
-delete
флагаfind
. Дополнительную информацию можно найти в записи руководства GNU по удалению файлов с помощью команды find .Сначала запустите команду
shopt -s globstar
. Вы можете запустить это в командной строке, и это будет действовать только в этом окне оболочки. Вы можете положить его в свой.bashrc
, и тогда все вновь запущенные снаряды подберут его. Результатом этой команды является**/
рекурсивное создание файлов совпадений в текущем каталоге и его подкаталогах (по умолчанию**/
означает то же самое, что и*/
: только в непосредственных подкаталогах). Затем:(или
gvfs-trash **/*.bak
или что у тебя).источник
Удаление файлов для меня не то, что вы должны использовать
rm
для. Вот альтернатива:Как утверждает Флимм в комментариях:
Так:
Вам не нужно создавать псевдоним для этого, потому что
trash-cli
пакет предоставляет командуtrash
, которая делает то, что мы хотим.Как поясняет Элия Каган в подробных комментариях, вы также можете сделать это рекурсивным использованием
find
. В этом случае вы не можете использовать псевдоним, поэтому команды ниже предполагают, что вы установилиtrash-cli
. Я суммирую комментарии Элии:Эта команда находит и отображает все
.bak
файлы и символические ссылки в любом месте текущего каталога или его подкаталогов или ниже.Для того, чтобы удалить их, добавьте к
-exec
сtrash
командой:-xtype f
выбирает файлы и символические ссылки на файлы, но не папки. Чтобы также удалить папки .bak, удалите эту часть и используйте ее-execdir
, чтобы избежатьcannot trash non-existent
ошибок для.bak
файлов внутри.bak
каталогов:источник
rm
для удаления вещи» является спорным утверждением , но я должен согласиться , что часто разумнее использовать что - то , что позволит вам отменить вещи.trash-cli
делает то же самое, что иgvfs-trash
без зависимости отgvfs
.find . -name "*.bak" -type f
чтоtrash *.bak
удаляет. Это действительно то, что вы имеете в виду? Вы можете перемещать каталоги в корзину с помощьюtrash
илиgvfs-trash
, ноtrash *.bak
перемещать будут только файлы и каталоги, чьи имена заканчиваются.bak
и которые находятся непосредственно в текущем каталоге. Оболочка расширяется*.bak
, поэтомуtrash *.bak
не влияет на.bak
файлы в подкаталогах, которые сами не названы.bak
.ls *.bak
(что, я думаю, вы имеете в виду) перечисляет, чтоtrash *.bak
мусор.find . -name '*.bak' -xtype f -exec trash {} +
удаляет все.bak
файлы в любом месте под.
. Он не может использовать псевдоним, поэтому установитеtrash-cli
или напишитеgvfs-trash
вместо этого. Вот пример.-xtype f
выбирает файлы и символические ссылки на файлы, но не папки. Для удаления.bak
папок тоже используйтеfind . -name '*.bak' -execdir trash {} +
, чтобы избежатьcannot trash non existent
ошибок для.bak
файлов внутри.bak
каталогов. Пожалуйста, не стесняйтесь использовать все это в своем ответе.Если вы хотите удалить из текущей папки все файлы определенного типа, но только 1 «глубокая»:
-maxdepth 2, потому что текущий каталог " . " считается первой папкой.
источник
Быстрый ответ:
Удалить все файлы с рассматриваемым именем или постфиксом рекурсивно:
find . -name '*.pyc' -type f -delete
Удалить все каталоги с рассматриваемым именем рекурсивно:
Несколько менее строго контролируется, но в одной строке:
[ ПРИМЕЧАНИЕ ]:
d
опция каталога и опцияf
файла.источник
Если вы находитесь в git-репо, вы можете использовать:
Это удаляет неотслеживаемые файлы и файлы в .gitignore.
источник