Mam katalog (~/temp/
), który zawiera wiele plików i podkatalogów, aw niektórych katalogach mogą zawierać inne pliki i podkatalogi. Ponadto w katalogu (~/temp/
) znajduje się specjalny plik txt o nazwie kept.txt
, lista niektórych plików i podkatalogów bezpośrednich zawartych w ~/temp/
, teraz chcę usunąć wszystkie inne pliki i katalogi pod ~/temp/
, które nie są wymienione w plik kept.txt
, jak to zrobić za pomocą polecenia powłoki, tym prostsze, tym lepiej.Skrypt powłoki: jak usunąć wszystkie pliki w katalogu, z wyjątkiem tych wymienionych w pliku?
np.
Katalog lubi jak poniżej:
$ tree temp/ -F
temp/
├── a/
├── b/
├── c/
│ ├── f2.txt
│ └── z/
├── f1.txt
└── kept.txt
Zawartość kept.txt
jest:
$ more kept.txt
b
kept.txt
W tym przypadku:
- chcę usunąć
a/
,c/
if1.txt
. W przypadkuc/
sam katalog i wszystkie treści podrzędne (pliki i katalogi) zostaną usunięte. - W formacie
kept.txt
formatem jest jeden element (plik lub katalog) na linię.
Poza tym usunie również 'keep.txt'. – cdarke
Nie to nie usunie, ponieważ OP ma również wiersz 'keep.txt' w pliku' kept.txt'. – anubhava
Przepuściłem to, przepraszam. (czy to było na edytowanie?) – cdarke