Як видалити всі файли, починаючи з певного рядка в 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 {} \;

Примітка: використовуйте з обережністю - резервне копіювання спочатку - також виконайте сухий пробіг, наприклад, наприклад

$ find . -type f -name foo\*

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


5
Мені довелося видалити понад 2 мільйони файлів і зіткнутися з проблемою, find . -type f -name foo\* -deleteзробив трюк
Лінас

25

Я спробував таким чином, це працює для мене спробуйте нижче команди.

rm -rf Example*

тут "Приклад" - це текст, який є загальним для всіх файлів.


4
Не впевнений, чому це не
найголосніша

@DanTheMan Це тому, що це ~ 4 роки новіші за інші відповіді. Це, безумовно, найпростіша відповідь.
joshuakcockrell

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.