Siemano linuksowe Mirasy. Muszę pilnie napisać dość rozbudowy skrypt bashowy i utknąłem na jednym etapie. Gdyby to był znany mi c# czy python to już dawno bym miał to za sobą. Niestety jestem słaby into bash.
Potrzebuję usunąć najnowsze pliki z podanego katalogu. Muszę ich usnąć tyle, aby suma rozmiaru usuwanych plików była mniej więcej równa wartości określonej wcześniej. Trzeba zrobić listę takich plików, pokazać je userowi, a jak ten się zgodzi to usunąć (albo przenieść w inne miejsce, to już nie ma znaczenia).
To brzmi bardzo prosto, w w/w językach wrzucił bym wszystkie pliki do słownika, posortował po dacie, a potem w pętli sumował po kolei ich wielkości, aż do uzyskania wymaganej sumy, jednocześnie odkładając sumowane pliki do osobnej tablicy/listy/słownika. Wtedy można by łatwo robić z nimi co się chce.
Ale jak to można zrobić "bashowym sposobem"? W sumie mam już składnię finda, który ładnie mi pokazuje pliczki jakie chce i w jakiej kolejności... Wygooglalem też jak wrzucić wynik finda w tablice, ale nie wiem czy w dobrą stronę idę. Pewnie Linux pozwala w lepszy sposób to załatwić niż bawić się na kolekcjach jak murzyn w c# na windowsie.. ( ͡°͜ʖ͡°)
Muszę pilnie napisać dość rozbudowy skrypt bashowy i utknąłem na jednym etapie. Gdyby to był znany mi c# czy python to już dawno bym miał to za sobą. Niestety jestem słaby into bash.
Potrzebuję usunąć najnowsze pliki z podanego katalogu. Muszę ich usnąć tyle, aby suma rozmiaru usuwanych plików była mniej więcej równa wartości określonej wcześniej. Trzeba zrobić listę takich plików, pokazać je userowi, a jak ten się zgodzi to usunąć (albo przenieść w inne miejsce, to już nie ma znaczenia).
To brzmi bardzo prosto, w w/w językach wrzucił bym wszystkie pliki do słownika, posortował po dacie, a potem w pętli sumował po kolei ich wielkości, aż do uzyskania wymaganej sumy, jednocześnie odkładając sumowane pliki do osobnej tablicy/listy/słownika. Wtedy można by łatwo robić z nimi co się chce.
Ale jak to można zrobić "bashowym sposobem"? W sumie mam już składnię finda, który ładnie mi pokazuje pliczki jakie chce i w jakiej kolejności... Wygooglalem też jak wrzucić wynik finda w tablice, ale nie wiem czy w dobrą stronę idę. Pewnie Linux pozwala w lepszy sposób to załatwić niż bawić się na kolekcjach jak murzyn w c# na windowsie.. ( ͡° ͜ʖ ͡°)
Pomoże ktoś?
#linux #bash #programowanie
twoj find | rm -rfAlbo uzyj exec:
twoj find . -exec rm -rf {} \;To po prostu usuwa pliki o zadanych warunkach.
ls -lt | awk '{sum += $5; if ($5 < 2000) print $9}' | xargs rm
gdzie 2000 to maksymalna suma rozmiaru plików do usunięcia (w bajtach)
ls -lt sortuje po dacie