Jak usunąć wszystkie pliki zaczynające się od określonego ciągu w systemie Linux

36

Muszę znaleźć wszystkie pliki zaczynające się od nazwy NAMEw drzewie katalogów i usunąć wszystkie te pliki za pomocą jednego polecenia powłoki.

Achini Pumika
źródło

Odpowiedzi:

1

aby usunąć wszystkie pliki, których nazwa ma nazwę --- możesz użyć

find -name . 'name*' -exec rm {} \;
Społeczność
źródło
1
Możesz także dodać -f jako argument „rm”, aby nie pojawiał się monit „Czy na pewno chcesz usunąć plik X?”
UtahJarhead
Która wersja grepma -execprzełącznik?
Ben Graham
Dlaczego ten komentarz ma negatywne opinie?
Ultrasonic54321
64

Usuń wszystkie pliki w bieżącym katalogu i jego podkatalogach, w których nazwa pliku zaczyna się od „foo”:

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

Uwaga: używaj ostrożnie - najpierw wykonaj kopię zapasową - najpierw wykonaj próbę próbną, np

$ find . -type f -name foo\*

poda ci tylko nazwy plików, które zostaną usunięte.

Paul R.
źródło
5
Musiałem usunąć ponad plików 2million i uruchomić w kłopoty, find . -type f -name foo\* -deletezałatwiło sprawę
Linas
25

Próbowałem w ten sposób, że to działa dla mnie spróbuj poniżej polecenia.

rm -rf Example*

tutaj „Przykład” to tekst wspólny dla wszystkich plików.

Dinesh Bhojvani
źródło
4
Nie jestem pewien, dlaczego nie jest to najczęściej głosowana odpowiedź ...
DanTheMan
@DanTheMan To dlatego, że jest ~ 4 lata nowszy niż inne odpowiedzi. To zdecydowanie najprostsza odpowiedź.
joshuakcockrell
10

Możesz użyć find:

find . -name "name*" -exec rm {} \;
PP
źródło
Również zamiast określenia „.” możesz podać ścieżkę bezwzględną.
UtahJarhead
3

Z globstaropcją (włącz za pomocą shopt -s globstar):

rm -f **/NAME*

**/rozszerza się do ./, */, */*/, */*/*/itd. Jeśli masz katalogów nazwy rozpoczynające NAMEkomenda będzie skarżą się, że rmnie można usunąć katalogi, ale to wszystko.

Zauważ, że może to napotkać ograniczenia długości linii poleceń, jeśli glob pasuje do wielu plików.

Alternatywnie, przy jak najmniejszej liczbie wywołań, rmjak to możliwe, ale bez ograniczeń długości linii poleceń:

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

(Zauważ, że +zamiast \;zamykać -execinstrukcję).

Benjamin W.
źródło
2

find . -name 'foo'* -type f -delete wydaje się najprostszą odpowiedzią.

Możesz uruchomić to bez -deleteflagi wcześniej, aby zobaczyć, które pliki zostaną usunięte.

Yehuda Schwartz
źródło
-2

Wyszukaj numer „i-węzła” pliku / folderu, a następnie usuń, używając numeru i-węzła. Poniżej znajduje się przykład:

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

find . -inum 3407873 -exec rm -rf {} \;
Diwa
źródło
To dobra odpowiedź - na inne pytanie. To nie jest odpowiedź na to pytanie.
Scott,