Mam więc katalog wypełniony innymi katalogami i zastanawiałem się, czy można usunąć pliki, które nie mają rozmiaru. Zazwyczaj pliki te mają 0 bajtów, a ponieważ chcę scalić wszystkie podkatalogi, mógłbym zastąpić całkowicie prawidłowy plik nieważkim plikiem 0-bajtowym, i tam jest mój legalny plik. Jakikolwiek sposób na usunięcie plików z bajtami zerowymi?
command-line
files
użytkownik245115
źródło
źródło
-empty
zamiast-size 0b
.Znajdź i usuń wszystkie pliki o rozmiarze 0 rekurencyjnie:
Przykład:
źródło
Możesz to również zrobić bezpośrednio w powłoce. Może to być przydatne, jeśli nie chcesz usuwać pustych ukrytych plików (tych, których nazwa zaczyna się na a
.
). Chociaż możesz to również zrobićfind
, alternatywą byłoby użycie samej powłoki:Wyjaśnienie
shopt -s globstar
: włącza opcję globstar dla bash, która powoduje**
dopasowanie jednego lub więcej podkatalogów.**/*
dopasuje wszystkie pliki i katalogi w bieżącym katalogu i wszystkich jego podkatalogach.for file in **/*; do ...; done
: iteruj po wszystkich znalezionych plikach i katalogach;[ ! -s "$file" ]
:[ -s "$file" ]
ma wartość true, jeśli plik istnieje i nie jest pusty. Dlatego[ ! -s "$file" ]
(!
odwraca test) jest prawdą, jeśli plik nie istnieje lub jest pusty.[ -f "$file" ]
: true, jeśli plik jest zwykłym plikiem. Nie katalog, plik urządzenia ani dowiązanie symboliczne itp.rm "$file"
: usuń plik.&&
Zapewnić, że następne polecenie jest uruchamiane tylko wtedy, gdy poprzedni był udany, więc to będzie usunąć tylko pusty, zwykłe pliki.źródło
Chociaż większość powyższych odpowiedzi jest poprawna, spójrz na to polecenie:
chociaż możesz uruchomić to polecenie:
spowoduje to usunięcie wszystkich pustych plików.
Możesz poszukać tych plików przed usunięciem:
źródło
-type f
,-empty
będzie również usunąć puste katalogi. Właśnie sprawdziłem stronę podręcznika.