logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Linux - Usuń z folderu wszystko z wyjątkiem pliku nazwa.tar.gz

MES Mariusz 24 Kwi 2014 14:16 2667 7
REKLAMA
  • #1 13538500
    MES Mariusz
    Poziom 36  
    Posty: 5452
    Pomógł: 8
    Ocena: 222
    Chciałbym w jednym kroku usunąć z danego folderu (Np. /var/backup/2014-04-24) wszystko (a więc wszystkie inne pliki oraz foldery z innymi plikami i folderami) z wyjątkiem pliku o nazwie nazwa.tar.gz.

    Nie za bardzo potrafię wymyślić w co ubrać komendę rm, by zadziałało to w podobny sposób. Ktoś rzuci pomysł / podpowiedź ?
  • REKLAMA
  • Pomocny post
    #2 13540483
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Jak masz pythona zainstalowanego, to proszę bardzo:
    Kod: Python
    Zaloguj się, aby zobaczyć kod
    Za pierwszym razem sprawdź, czy wyrzuca właściwe pliki do usunięcia i dopiero odhashuj „rm”.
  • REKLAMA
  • Pomocny post
    #3 13540492
    Szymon Tarnowski
    Poziom 27  
    Posty: 1292
    Pomógł: 61
    Ocena: 181
    find z negatywną maską na nazwę pliku i niech przy każdym plik wywoła rm z jego nazwą.
  • REKLAMA
  • Pomocny post
    #4 13540559
    PDT
    Poziom 24  
    Posty: 511
    Pomógł: 79
    Ocena: 50
    Wystarczy do tego polecenie:

    find . -maxdepth 1 -type f | grep -v "nazwa.tar.gz" | xargs -i -t rm {}

    Oczywiście wyczyści tylko w bieżącym katalogu, aby zrobił to też w podkatalogach wystarczy usunąć opcję "-maxdepth 1".

    Pzdr
  • REKLAMA
  • #5 13540881
    gaskoin
    Poziom 38  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    rm obsługuje przecież regexy
  • #6 13541374
    PDT
    Poziom 24  
    Posty: 511
    Pomógł: 79
    Ocena: 50
    gaskoin napisał:
    rm obsługuje przecież regexy


    Nieprawda.
    Wyrażenia regularne obsługuje interpreter poleceń (shell) i odpowiednio rozwija.

    Pzdr
  • #7 13544089
    MES Mariusz
    Poziom 36  
    Posty: 5452
    Pomógł: 8
    Ocena: 222
    PDT napisał:
    Wystarczy do tego polecenie:

    find . -maxdepth 1 -type f | grep -v "nazwa.tar.gz" | xargs -i -t rm {}

    Oczywiście wyczyści tylko w bieżącym katalogu, aby zrobił to też w podkatalogach wystarczy usunąć opcję "-maxdepth 1".

    Pzdr


    Tyle, że mi chodziło o usunięcie nie tylko plików ale i wszystkich folderów. Pozostawienie tam wyłącznie pliku nazwa.tar.gz zawierającego wszystko, co było wcześniej w folderze.
  • Pomocny post
    #8 13546556
    PDT
    Poziom 24  
    Posty: 511
    Pomógł: 79
    Ocena: 50
    Taką archiwizację danych można znacznie uprościć chwilowo przechowując/tworząc plik "nazwa.tar.gz" w innym folderze, najlepiej na tym samym systemie plików (koszt "mv"). Na przykład:
    cd folder
    tar cf - . | gzip >../nazwa.tar.gz
    rm -rf * .[!.]*
    mv ../nazwa.tar.gz .


    Pzdr

Podsumowanie tematu

✨ Użytkownik poszukiwał sposobu na usunięcie wszystkich plików i folderów z katalogu /var/backup/2014-04-24, pozostawiając jedynie plik nazwa.tar.gz. Odpowiedzi sugerowały różne metody, w tym użycie Pythona do iteracji przez pliki i usunięcia tych, które nie odpowiadają nazwie pliku, oraz zastosowanie polecenia `find` w połączeniu z `grep` i `xargs` do usunięcia plików w bieżącym katalogu. Wskazano również, że `rm` nie obsługuje wyrażeń regularnych, a także zaproponowano alternatywne podejście polegające na archiwizacji danych do pliku tar.gz w innym folderze przed usunięciem zawartości.
Wygenerowane przez model językowy.
REKLAMA