2012-07-02 11 views
5

Chcę usunąć rekursywnie pliki z określonego katalogu. Tak, UżyłemRóżnica między "find -delete" a "rm -rf"?

find . -wholename "*.txt" -delete 

Możemy również usunąć pliki przy użyciu

rm -rf *.txt 

Jaka jest różnica między usunięciem pliku przy użyciu rm i find ??

+3

Z 'find' możesz dokładniej określić, które pliki usuwasz, ale oba kończą się na wywołaniu' unlink() '[strona man] (http://linux.die.net/man/2/unlink) na plikach, które usuwasz. – Wernsey

Odpowiedz

5

find . -wholename abd.txt -delete próbuje usunąć wszystkie pliki o nazwie abd.txt że są gdzieś w drzewie katalogów .

rm -rf abd.txt próby usunięcia abd.txt, a jeśli jest to katalog, wszystkie pliki i katalogi w całym drzewie.

+0

OK. Jaka jest więc różnica między usuwaniem za pomocą "find -delete" i "rm -rf"? –

+1

Używając 'find ...' skanujesz również podkatalogi, podczas gdy 'rm' skanujesz tylko te pliki, które znajdują się w katalogu * current *, a nie w podkatalogu. –

+0

@MisterJack: z '-r',' rm' usuwa również podkatalogi. – reinierpost

3

Podczas find -wholename GLOBPATTERN próbuje dopasować każdy plik poniżej bieżącego katalogu (niezależnie od głębokości), to glob użyte z poleceniem w rm dorównuje tylko na plikach, które są bezpośrednio (głębokość 1) w bieżącym katalogu.

Przy okazji. nie trzeba przełącznik -r do rm chyba że chcesz usunąć katalog rekurencyjnie (Ze względu na rozszerzenie .txt, zakładam, że chcesz tylko usunąć zwykłe pliki)

1

find stosować -delete, wyszukuje pliki i usuwa je . Find komenda pobiera ścieżkę, aby wyszukać pliki, a następnie flaga -delete usuwa pliki znalezione w podanej ścieżce. Tak więc, można powiedzieć, znalezisko jest bardziej selektywnego usuwania

Podczas gdy komenda rm -rf usuwanie plików/katalogów rekurencyjnie nie wiem co. Oznacza to, że usunie pliki i katalogi w określonej ścieżce. -r oznacza rekursję i -f jest wymuszone usuwanie. Tak więc rm w połączeniu z -rf będzie kontynuował usuwanie katalogów i plików w katalogach na ścieżce docelowej, dopóki nie znajdzie więcej.