Chciałbym usunąć każdy plik, ale zachowaj strukturę folderów. Czy jest jakiś sposób?
UWAGA: (Używam GNU bash 4.1.5).
Chciałbym usunąć każdy plik, ale zachowaj strukturę folderów. Czy jest jakiś sposób?
UWAGA: (Używam GNU bash 4.1.5).
Odpowiedzi:
Spróbuj tego:
find . ! -type d -exec rm '{}' \;
Spowoduje to usunięcie każdego pojedynczego pliku, z wyjątkiem katalogów, poniżej bieżącego katalogu roboczego. Bądź bardzo ostrożny z tym poleceniem.
Jeśli wersja find
na twoim komputerze to obsługuje, możesz również użyć
find . ! -type d -delete
find
Komenda nie widzi cudzysłowie. Po prostu traktuje {}
znacznik jako argument.
-exec command {} +
” i to „ -exec command ;
”. W \;
przeszłości korzystałem z „{}”.
Możesz użyć polecenia, find
aby zlokalizować każdy plik, ale zachować strukturę katalogów:
$ find /some/dir -type f -exec rm {} +
Na podstawie tego pytania dotyczące Uniksa i Linuksa zatytułowane: gnu znajdź i maskuj {} dla niektórych powłok - które? , ucieczka przed {}
pojedynczymi tikami ( '
) nie wydaje się już konieczna w przypadku współczesnych powłok, takich jak Bash.
Łatwy sposób na rekursywne usunięcie każdego zwykłego pliku z bieżącego katalogu i podkatalogów:
zsh -c 'rm **/*(.)'
Tylko zsh ma kwalifikatory globowania do dopasowania plików według typu. Jednak rm
polecenie nie działa na katalogach, więc w bash możesz użyć
shopt -s globstar
rm **/*
To nie działa dla poleceń innych niż rm
chociaż. Ogólnie możesz użyć find
:
find . -type f -delete
lub jeśli twój find
nie obsługuje -delete
:
find . -type f -exec rm {} +
Miałem podobny wymóg usuwania plików ze ścieżki i jej podkatalogów (filtrowanie według czasu) bez usuwania struktury katalogów.
I użyłem poniższego formatu, który działał dla mnie.
find / test123 / home / test_file_hip / data / nfs -mtime +6 -type f -exec rm {} \;
Składnia: find (ścieżka do pliku) -mtime (większy lub mniej niż dni) -typ f -exec rm {} \;
-type: Wspomnij o typie pliku „f” dla katalogu „d” -exec: wykonaj polecenie rm: remove {}: wyjście polecenia find
Uwaga: przetestuj go przed użyciem. Jeśli coś przeoczyłem, możesz je poprawić lub zaktualizować.
find ... rm
struktura została już uwzględniona, nie jestem pewien, czy jest to cenny wkład jako nowa odpowiedź na to pytanie.