Usuń wszystkie pliki rekurencyjnie bez usuwania katalogów


10

Chcę „wyczyścić” wszystkie pliki z katalogu, w tym wszystkie pliki w podkatalogach, ale chcę pozostawić podkatalogi na swoim miejscu. Rozumiem rm -r, że spowoduje to również usunięcie samych podkatalogów.

I nie chcą usuwać ukryte pliki (kropka).

Jak można to zrobić?


1
find -type f ! -name "[.]*" -deletenie jest odpowiedni?
Costas

Nie wiem Czy to robi to, o co proszę?
Scott Wilton,

Spróbuj bez -delete- wystarczy wydrukować nazwy plików, aby je usunąć.
Costas

Czy chcesz usunąć pliki (ukryte lub nie) z ukrytych katalogów?
Stéphane Chazelas

Co z dowiązaniami symbolicznymi do katalogów?
Stéphane Chazelas

Odpowiedzi:


10

Użyj finddo tego:

find . ! -name '.*' ! -type d -exec rm -- {} +

1
Nie wszystkie znalezione implementacje mają-delete
wurtel 30.01.2015

3
@RomeoNinov proszę przeczytać pytanie OP:I do not want to delete hidden (dot) files.
jimmij 30.01.2015

1
@Casas, nie, nie ma powłoki wymagającej ucieczki +(przynajmniej nie w rodzinach Bourne, csh lub rc). Istnieje legenda, która mówi, że niektóre stare wersje cshwymagały ucieczki, {}ale nigdy ich nie spotkałem.
Stéphane Chazelas,

1
@ScottWilton Ukryte katalogi są uwzględnione, ale ukryte pliki w ukrytych katalogach nie. Jeśli chcesz odrzucić wszystkie pliki w ukrytych katalogach, find . ! -name '.*' ! -type d ! -path '*/.*'wykonaj tę pracę.
jimmij

1
@ Jimmy, bardziej lubię find . -name '.?*' -prune -o ! -type d -exec rm {} +unikać zejścia w tych. Pamiętaj, że --nie jest to konieczne (choć nie szkodzi), ponieważ ścieżki zaczynają się od ./.
Stéphane Chazelas

0

spróbuj czegoś takiego:

find <path> ! -name '.*' -type f -exec rm {} \;

Czy jest jakiś powód, dla którego należy usuwać pliki pojedynczo zamiast przyspieszać .... -exec rm {} + ?
Anthon

Wolę robić rzeczy po kolei. Operacje masowe (i równoległe) mają dziwne (i nieprzyjemne) skutki uboczne (ponieważ powodują ogromne obciążenie podsystemu we / wy)
Romeo Ninov

1
-exec rm {} +nie jest równoległy, po prostu wywołuje rmz kilkoma nazwami plików. Uruchamia mniej rmwywołań, więc jest bardziej przyjazny dla zasobów. Jeśli jest nieco mniej bezpieczny, ponieważ powiększa okno wyścigu, w którym składnik katalogu plików do usunięcia można zmienić na dowiązanie symboliczne. Ale tylko -deletelub w -execdir rm {} \;pełni by to rozwiązało.
Stéphane Chazelas

@ StéphaneChazelas, żadne z nich (-delete lub -execdir) istnieje w systemie UNIX. I nie widzę w pytaniu, aby wspomnieć o Linuksie!
Romeo Ninov

@RomeoNinov, tak, powiedziałem w innym komentarzu tutaj, że tylko -execstandard. -deletei -execdirpochodzą z BSD, GNU dodało je około 10 lat później. W każdym razie nie ma to nic wspólnego z Linuksem, który jest tylko jądrem.
Stéphane Chazelas
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.