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 {} \;

Odpowiedzi:


4
find -type d -name b -exec echo "mv {}/* {}/..; rmdir {}" \; | sh

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.