Jak bezpiecznie usunąć wszystkie pliki z określonym rozszerzeniem (np. .bak
) Z bieżącego katalogu i wszystkich podfolderów za pomocą jednego wiersza polecenia? Po prostu boję się używać, rm
ponieważ raz źle go użyłem, a teraz potrzebuję porady.
command-line
files
rm
batch
użytkownik216038
źródło
źródło
rm *.bak
?rm *.bak
nie będzie działać w podkatalogach.rm *.bak
usuwa tylko wszystkie pliki z rozszerzeniem .bak w bieżącym katalogu. Aby również robić rzeczy w podkatalogach, które musiałyście majstrować przy globach, użyj opcji -r lub skorzystaj z przykładu find.rm -r *.bak
! Usuwa również katalogi kończące.bak
się całą zawartością.-delete
to ostatni argument w twoim poleceniu. Jeśli umieścisz go przed-name *.bak
argumentem, usunie wszystko.źródło
-delete
flagifind
. Więcej informacji można znaleźć we wpisie instrukcji GNU do usuwania plików z find .Najpierw uruchom polecenie
shopt -s globstar
. Możesz uruchomić to w wierszu poleceń, a zadziała to tylko w tym oknie powłoki. Możesz umieścić go w swoim.bashrc
, a wtedy wszystkie nowo uruchomione pociski go podniosą. Efektem tego polecenia jest**/
rekurencyjne tworzenie plików dopasowania w bieżącym katalogu i jego podkatalogach (domyślnie**/
oznacza to samo, co*/
: tylko w bezpośrednich podkatalogach). Następnie:(lub
gvfs-trash **/*.bak
co masz).źródło
Usuwanie plików nie jest dla mnie czymś, czego powinieneś używać
rm
. Oto alternatywa:Jak stwierdza Flimm w komentarzach:
Więc:
Nie musisz do tego tworzyć aliasu, ponieważ
trash-cli
pakiet zawiera polecenietrash
, które robi to, co chcemy.Jak Eliah Kagan wyjaśnia w obszernych komentarzach, możesz również użyć tego rekurencyjnego
find
. W takim przypadku nie możesz użyć aliasu, więc poniższe polecenia zakładają, że masz zainstalowanytrash-cli
. Podsumowuję komentarze Eliasza:To polecenie wyszukuje i wyświetla wszystkie
.bak
pliki i dowiązania symboliczne w dowolnym miejscu bieżącego katalogu lub jego podkatalogów lub niższych.Aby je usunąć, dodaj polecenie
-exec
ztrash
poleceniem:-xtype f
wybiera pliki i dowiązania symboliczne do plików, ale nie foldery. Aby usunąć również foldery .bak, usuń tę część i użyj-execdir
, aby uniknąćcannot trash non-existent
błędów.bak
plików w.bak
katalogach:źródło
rm
do usuwania rzeczy” jest kontrowersyjnym stwierdzeniem, ale muszę się zgodzić, że często rozsądniej jest użyć czegoś, co pozwoli ci cofnąć pewne rzeczy.trash-cli
robi to samo, cogvfs-trash
bez zależnościgvfs
.find . -name "*.bak" -type f
cotrash *.bak
usuwa. Czy to naprawdę masz na myśli? Możesz przenosić katalogi do kosza za pomocątrash
lubgvfs-trash
, aletrash *.bak
przenosi tylko pliki i katalogi, których nazwy kończą się na.bak
i które znajdują się natychmiast w bieżącym katalogu. Powłoka rozszerza się*.bak
, więctrash *.bak
nie wpłynie na.bak
pliki w podkatalogach, które same nie są nazwane.bak
.ls *.bak
(co myślę, że masz na myśli) wymienia, jakietrash *.bak
śmieci.find . -name '*.bak' -xtype f -exec trash {} +
niszczy wszystkie.bak
pliki w dowolnym miejscu pod.
. Nie może używać aliasu, więc zamiast tego zainstalujtrash-cli
lub napiszgvfs-trash
. Oto przykład.-xtype f
wybiera pliki i dowiązania symboliczne do plików, ale nie foldery. Aby usunąć również.bak
foldery , użyjfind . -name '*.bak' -execdir trash {} +
, co pozwala uniknąćcannot trash non existent
błędów.bak
plików w.bak
katalogach. Możesz użyć dowolnego z tych danych w swojej odpowiedzi.Jeśli chcesz usunąć wszystkie pliki określonego typu, ale tylko 1 folder „głęboki” z bieżącego folderu:
-maxdepth 2, ponieważ bieżący katalog „ . ” liczy się jako pierwszy folder.
źródło
Szybka odpowiedź:
Usuń wszystkie pliki z rozważaną nazwą lub postfiksem rekurencyjnie:
find . -name '*.pyc' -type f -delete
Usuń wszystkie katalogi o rozważanej nazwie rekurencyjnie:
Nieco mniej ściśle kontrolowane, ale w jednej linii:
[ UWAGA ]:
d
jest opcją katalogu if
opcją pliku.źródło
Jeśli korzystasz z repozytorium git, możesz użyć:
Spowoduje to usunięcie nieśledzonych plików i plików w .gitignore.
źródło