Jestem najbliżej
# rm /path/to/directory/*.*
ale to nie działa w przypadku plików, które nie mają rozszerzenia ...
Jestem najbliżej
# rm /path/to/directory/*.*
ale to nie działa w przypadku plików, które nie mają rozszerzenia ...
Odpowiedzi:
Linux nie używa rozszerzeń. Twórca pliku decyduje, czy chce, aby nazwa miała rozszerzenie. Linux patrzy na pierwszy bajt, aby dowiedzieć się, z jakim plikiem ma do czynienia.
Aby usunąć wszystko z katalogu, użyj:
rm /path/to/directory/*
Możesz użyć tej -r
opcji, na przykład:
rm -r /path/to/directory/*
aby usunąć również wszystkie podkatalogi (wraz z całą ich zawartością) w katalogu, z którego usuwana jest zawartość. W przeciwnym razie pojawi się błąd informujący, że nie usuwa katalogu.
all files
;) *.*
oznacza wszystkie pliki zawierające .
gdzieś w nazwie
*a*
oznacza zero lub więcej znaków, po których a
następuje zero lub więcej znaków. To pasuje do nazwy plików happy
, apple
, a
lub la
.
Aby usunąć folder z całą zawartością (w tym wszystkie foldery wewnętrzne ):
rm -rf /path/to/directory
Aby usunąć całą zawartość folderu (w tym wszystkie foldery wewnętrzne ), ale nie sam folder:
rm -rf /path/to/directory/*
lub
rm -rf /path/to/directory/{*,.*}
jeśli chcesz mieć pewność, że ukryte pliki / katalogi również zostaną usunięte.
Aby usunąć wszystkie „pliki” z folderu ( nie usuwając folderów wewnętrznych ):
rm -f /path/to/directory/{*,.*}
Ostrzeżenie : jeśli masz spacje na swojej ścieżce, zawsze używaj cudzysłowów.
rm -rf /path/to the/directory/*
odpowiada 2 oddzielnym rm -rf
połączeniom:
rm -rf /path/to
rm -rf the/directory/*
Aby uniknąć tego problemu, możesz użyć '
cudzysłowów '
( nie rozwija zmiennych powłoki) lub "
podwójnych cudzysłowów "
( rozwija zmienne powłoki):
rm -rf "/path/to the/directory/"*
Gdzie:
rm
- oznacza „ usuń ”-f
- oznacza „ siłę ”, która jest pomocna, gdy nie chcesz być pytany / pytany, czy chcesz na przykład usunąć archiwum.-r
- oznacza „ rekurencyjny ”, co oznacza, że chcesz zejść rekurencyjnie do każdego folderu i usunąć wszystko.rm -rf /path/to/directory/*
nie usuwa ukrytego pliku w folderze np .htaccess
. Może rm -rf /path/to/directory/.
? Nie próbowałem tego.
rm -rf /path/to/directory/.*
usuwa tylko ukryte pliki w podanym katalogu. Patrząc na komentarz @ danjjl do odpowiedzi @ Rinzwind, aby również usunąć ukryte pliki, uruchom shopt -s dotglob
przed uruchomieniem rm -rf /path/to/directory/*
.
rm -rf /path/to/directory/.*
w moim systemie spowodowałem usunięcie elementów w /path/to
. Na szczęście właśnie utworzyłem kopię zapasową wszystkich danych na osobnym dysku. Nie trzeba dodawać, że NIE należy wydawać polecenia, rm -rf /path/to/directory/.*
chyba że utworzono kopię zapasową całego komputera w osobnym / bezpiecznym miejscu!
Aby usunąć wszystkie pliki w katalogu (w tym ukryte pliki i podkatalogi) uruchom:
rm -rf /path/to/directory/{*,.*}
./
i ../
, ale to nadal usuwać ukryte pliki.
rm -r $(pwd)/{*,.*}
Jeśli chcesz usunąć tylko pliki z katalogu / path / to / możesz to zrobić
find /path/to/directory -type f -print0| xargs -0 rm
lub
find /path/to/directory -type f -exec rm '{}' \;
Możesz ładować za pomocą find
, zaletą jest to, że możesz wymienić to, co zostało znalezione bez przesyłania potokiem, rm
abyś mógł zobaczyć, co zostanie usunięte przed rozpoczęciem.
GNU find
jako -delete
orzeczenie. Jeśli nadal chcesz używać -exec
, zastąpienie \;
przez +
spowoduje zebranie rm
połączeń razem, co zwiększy wydajność.
Aby usunąć wszystkie pliki i katalogi (w tym ukryte ) z katalogu, możesz wykonać następujące czynności:
usuń folder, a następnie utwórz go ponownie
rm -rf dir_name && mkdir dir_name
posługiwać się find
find dir_name -mindepth 1 -delete
Tutaj określamy, -mindepth 1
aby wykluczyć sam katalog nazwa_katalogu.
Spójrz na następujący link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Jeśli chcesz również usunąć wszystkie podkatalogi i sam katalog, możesz użyć rm -rf /path/to/directory
. Ale zawsze dwukrotnie sprawdź linię przed naciśnięciem klawisza return, rm -rf
może również powodować wiele spustoszeń, np. Jeśli przypadkowo wstawisz spację po pierwszym ukośniku, mając uprawnienia superużytkownika ...
Ponieważ to pytanie jest stale na szczycie Google, gdy sam go szukam:
Inne odpowiedzi mają różne problemy:
Niektóre z nich obejmują .
i ..
które są głośne, mylące i denerwujące.
Niektóre z nich zapominają ukryte pliki (pliki zaczynające się od kropki).
Nie usuwają w prawidłowej (najgłębszej kolejności) kolejności, aby umożliwić usunięcie katalogu.
Schodzą do innych (zamontowanych) systemów plików, co często jest niepożądane.
Trudno je poprawnie rozszerzyć o dodatkowe parametry (więcej na ten temat poniżej).
find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Zauważ, że dodałem -xdev
argument, aby zapobiec schodzeniu w wierzchowce (jak /proc
itp.).
-depth
czy -delete
?Pomimo tego, że ludzie ciągle mnie za to głoszą, metody te mają swoje wady: nie wydaje się, aby były wystarczająco rozszerzalne, aby pozwolić -prune
na podkatalog (bez wprowadzania dalszych problemów). W przeciwieństwie do tej metody można wstawić
-not \( -path "${DIR}/subdir" -prune \)
przed -mindepth
argumentem wykluczającym subdir
usunięcie jego zawartości.
-depth
flaga find
.
-delete
zfind
? -delete
jest pierwsza głębokość. Jesteś już zakładając, nie POSIX-owych find
z -printf
, więc można równie dobrze wykorzystywać -delete
albo-depth -print0 | xargs -0 rm
-not \( -path "$DIR/subdir" \)
... ale moja działa? Dlaczego?
shopt -s dotglob
przed uruchomieniemrm (...)