Jak usunąć pliki z wiersza poleceń za pomocą wyrażeń regularnych?


18

Powiedzmy, że mam 20 plików o nazwie FOOXX, gdzie XX to numer pliku, np. 01, 02 itd.

W tej chwili, jeśli chcę usunąć wszystkie pliki mniejsze niż 10, jest to łatwe i po prostu używam symboli wieloznacznych, np. Rm FOO0 *

Jeśli jednak chcę usunąć określone pliki z zakresu, np. 13-15, staje się to trudniejsze.

rm FPP [13-15] nie działa i pyta mnie, czy chcę usunąć wszystkie pliki. Podobnie rm FOO1 [3-5] chce usunąć wszystkie pliki, które zaczynają się od FOO1

Więc jaki jest najlepszy sposób na usunięcie takich zakresów plików?

Próbowałem zarówno z bash, jak i zsh, i nie sądzę, że różnią się tak bardzo dla tak podstawowego zadania?


„... rm FOO1 [3-5] chce usunąć wszystkie pliki, które zaczynają się od FOO1” To nie ma sensu i na pewno tak nie jest.
Ignacio Vazquez-Abrams,

@Ignacio tak - chciałbym zobaczyć, że zestaw znaków ma tę kolejność sortowania!
kmarsh

Odpowiedzi:



13

W przypadku przyszłych czytelników findpolecenie może również usuwać pliki. Postanowiłem rozwiązać ten problem:

find . -type f -regex '...' -delete

ale wybrana odpowiedź jest najprostszą odpowiedzią na to pytanie.


Wybrana odpowiedź jest jednak dobra tylko dla plików zgodnych z konwencją nazewnictwa. Dzięki twojej odpowiedzi mogłem po prostu usunąć wszystkie pliki obiektowe z katalogu. (w moim przypadku po prostu poszedłem find . -name "*.o" -deletei działało to jak urok)
John Hamilton

6

ls | grep regex | xargs rm


6
Powinieneś użyć find -regex ... -print0 | xargs -0 ...do tego, inaczej nie powiedzie się w przypadku nazw plików ze spacjami.
Wstrzymano do odwołania.

1
Oczywiście, jeśli zamierzasz używać find, równie dobrze możesz po prostu użyć -exec.
Ignacio Vazquez-Abrams,

W moim przypadku pliki miały spacje, a zmiana separatora rozwiązuje problem spacji: ls | grep regex | xargs --delimiter = '\ n' rm
Anake


@evilsoup, +1 za dodanie tego ostrzeżenia, ale kto wstawia nowy wiersz w nazwie pliku?
Iulian Onofrei
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.