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ć?
command-line
find
rm
Scott Wilton
źródło
źródło
find -type f ! -name "[.]*" -delete
nie jest odpowiedni?-delete
- wystarczy wydrukować nazwy plików, aby je usunąć.Odpowiedzi:
Użyj
find
do tego:źródło
-delete
I do not want to delete hidden (dot) files.
+
(przynajmniej nie w rodzinach Bourne, csh lub rc). Istnieje legenda, która mówi, że niektóre stare wersjecsh
wymagały ucieczki,{}
ale nigdy ich nie spotkałem.find . ! -name '.*' ! -type d ! -path '*/.*'
wykonaj tę pracę.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./
.spróbuj czegoś takiego:
źródło
.... -exec rm {} +
?-exec rm {} +
nie jest równoległy, po prostu wywołujerm
z kilkoma nazwami plików. Uruchamia mniejrm
wywoł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-delete
lub w-execdir rm {} \;
pełni by to rozwiązało.-exec
standard.-delete
i-execdir
pochodzą 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.