Как удалить все файлы, начинающиеся с определенной строки в 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 {} \;

Также вместо указания «.» Вы можете указать абсолютный путь.
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 {} \;

Это хороший ответ - на другой вопрос. Это не ответ на этот вопрос.
Скотт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.