Как удалить все файлы, начинающиеся с определенной строки в Linux

36

Мне нужно найти все файлы, начиная с имени, NAMEв дереве каталогов и удалить все эти файлы с помощью одной команды оболочки.

Ачини Пумика
источник

Ответы:

1

удалить все файлы, имя которых имеет имя --- вы можете использовать

find -name . 'name*' -exec rm {} \;
Сообщество
источник
1
Вы также можете добавить -f в качестве аргумента 'rm', чтобы у вас не появлялось сообщение "Вы уверены, что хотите удалить X-файл?"
UtahJarhead
Какая версия grepимеет -execпереключатель?
Бен Грэм
Почему этот комментарий имеет отрицательные голоса?
Ultrasonic54321
64

Удалите все файлы в текущем каталоге и его подкаталогах, где имя файла начинается с «foo»:

$ find . -type f -name foo\* -exec rm {} \;

NB: используйте с осторожностью - сначала сделайте резервную копию - сначала выполните пробный прогон, например,

$ find . -type f -name foo\*

просто скажет вам имена файлов, которые будут удалены.

Пол Р
источник
5
Я должен был удалить более 2 миллионов файлов и столкнуться с неприятностями, find . -type f -name foo\* -deleteсделал свое дело
Линас
25

Я пробовал таким образом, это работает для меня, попробуйте ниже команды.

rm -rf Example*

здесь «Пример» - это текст, общий для всех файлов.

Динеш Бходжвани
источник
4
Не уверен, почему это не самый высокий голос ....
DanTheMan
@DanTheMan Это потому что это ~ 4 года новее, чем другие ответы. Это, безусловно, самый простой ответ.
Джошуаккокрелл
10

Вы можете использовать find:

find . -name "name*" -exec rm {} \;
PP
источник
Также вместо указания «.» Вы можете указать абсолютный путь.
UtahJarhead
3

С globstarопцией (включить с помощью shopt -s globstar):

rm -f **/NAME*

**/расширяется до ./, */, */*/, и */*/*/т.д. Если у вас есть каталог имя , начинающееся с NAME, то команда будет жаловаться , что rmне может удалить каталоги, но это все.

Обратите внимание, что это может привести к ограничениям длины командной строки, если глобус совпадает со многими файлами.

В качестве альтернативы, с rmминимально возможным количеством вызовов , но без ограничений по длине командной строки:

find . -type f -name 'NAME*' -exec rm -f {} +

(Обратите внимание, +вместо того, \;чтобы закрыть -execутверждение.)

Бенджамин В.
источник
2

find . -name 'foo'* -type f -delete кажется самым простым ответом.

Вы можете запустить это без -deleteфлага, прежде чем посмотреть, какие файлы будут удалены.

Иегуда Шварц
источник
-2

Найдите номер «Inode» файла / папки, а затем удалите, используя номер Inode. Ниже приведен пример:

ls -il
3407873 drwxr-xr-x. 2 root   root      4096 Mar 30 07:49 p

find . -inum 3407873 -exec rm -rf {} \;
Diwa
источник
Это хороший ответ - на другой вопрос. Это не ответ на этот вопрос.
Скотт