Znajdź i usuń folder, ale nie zawartość

4

Próbuję znaleźć wszystkie nazwane foldery bi usunąć je, nie usuwając ich zawartości (czy to folderów, plików, ukrytych plików, ...).

Na przykład plik na ścieżce /a/b/c/filepowinien zostać/a/c/file

Oto, co próbowałem, co nie działa:

find -type d -name b -exec mv {}/* {} \; -exec rmdir {} \;
użytkownik311987
źródło

Odpowiedzi:

4
find -type d -name b -exec echo "mv {}/* {}/..; rmdir {}" \; | sh
Cyrus
źródło
Ok, dzięki. Co z ukrytymi folderami / plikami?
user311987
mvi rmdirobsłużyć oba poprawnie.
Cyrus
Podoba mi się to rozwiązanie, nawet jeśli możesz znaleźć jakieś problemy w przypadku, gdy istnieje katalog o tej samej nazwie, który chcesz przenieść w górę w katalogu ojca (kiedy wykonujesz mv {}/* {}/np.). W zamian za pomocą plików zastąpisz te w górnym katalogu bez pytania. Aby zarządzać wszystkim, myślę, że warto
napisać
Cyrus, nie martwię się o ukryte pliki, ale o mv i rmdir.
user311987
Dodaj shopt -s dotglob; przed mvi zamień shna, bashaby przechwytywać pliki kropek i katalogi.
Cyrus