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.

Odpowiedzi:


1

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

find -name . 'name*' -exec rm {} \;

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.


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.


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 {} \;

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ę).


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.


-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 {} \;

To dobra odpowiedź - na inne pytanie. To nie jest odpowiedź na to pytanie.
Scott,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.