Chcę usunąć wszystkie pliki z katalogu, pozostawiając tylko niektóre określone pliki, nie mają one nic wspólnego według nazwy. Jak mogłem to osiągnąć?
Na przykład nazwy plików, które chcę zachować, to:
file_1.png
, another_file.jpg
,some_music.mp3
command-line
files
rm
AGamePlayer
źródło
źródło
shopt -u extglob
).Utwórz podkatalog
tmp
, przenieś wszystkie pliki, które chcesz zachować, do tego katalogu, arm -f *
następnie wykonaj później. Nie wpłynie to natmp
katalog.Następnie po prostu wykonaj:
(Zakładając, że żaden z przeniesionych plików nie zaczyna się od kropki).
Jest to jeden z niewielu przypadków, w których sensowne jest używanie myszy i przeglądarki plików, takich jak Nautilus, w których można faktycznie Ctrl-kliknąć kilka plików, które chcesz zachować, a następnie użyć menu:
Edit -> Invert Selection
aby pobrać inne pliki, a następnie usunąć je .źródło
ls
sprawdzić, czy nie przegapiłeś żadnego z plików, które chcesz zachować.Dodaj nazwy plików, które chcesz zachować, do pliku tekstowego, po jednym w wierszu. Ten plik nie powinien znajdować się w katalogu lub należy również dodać jego nazwę.
Jeśli nazwa twojego katalogu to foo, a nazwa pliku to bar , wykonaj następujące czynności.
Robi to:
find -type f
wyszukuje nazwy wszystkich plików w foo i jego podkatalogach i drukuje je do STDOUT. Z opcją-print0
to ogranicza nazwy plików z NUL bajtów.grep -v -f bar
wyklucza wszystkie nazwy plików pasujące do linii na pasku . Z opcją-z
traktuje dane wejściowe jako zbiór linii ograniczonych bajtem NUL, z opcją-Z
ogranicza dane wyjściowe bajtem NUL.xargs rm
wywołujerm
wielokrotnie, aby usunąć pliki. Z opcją-0
traktuje dane wejściowe jako zbiór linii ograniczonych bajtem NUL.Działa to z nazwami plików zawierającymi białe znaki.
źródło
find
, wolałbymfind . -maxdepth 1 ! -name 'file1' ! -name 'file2' -type f -exec rm -vi {} +