Muszę zachować cały katalog, który zawiera pliki w określonym podkatalogu, ale aby usunąć pozostałe katalogi, w których podkatalog jest pusty.
Bardziej szczegółowo tutaj jest struktura:
A
|
|--------312311
| |
| |----Recording
| |----a.txt
| |----b.txt
|
|
|--------453453
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------566532
| |----Recording
| |----a.txt
| |----b.txt
Podkatalogi mogą zawierać plik lub nie. Muszę więc usunąć cały katalog, taki jak „312311” i „566532”, i należy pozostawić tylko „453453” ze wszystkimi danymi, ponieważ ma on plik w folderze „Nagrywanie”, który jest dla mnie konkretnym katalogiem.
Widziałem wiele postów, ale zawiera linki do wielu konkretnych nazw plików. Każda pomoc będzie mile widziana, ponieważ muszę to zrobić wiele razy w tygodniu.
command-line
directory
find
Derek James
źródło
źródło
Odpowiedzi:
Poniższy skrypt będzie działał dokładnie tak, jak opisano:
Przeszukuje każdy z folderów w poszukiwaniu folderu o nazwie „Nagrywanie”
Na obrazku:
spowoduje:
Scenariusz
Używać
delete_empty.py
Uruchom go z katalogiem (full!) (Zawiera katalogi, A w twoim przykładzie) jako argument polecenia:
Otóż to.
Wyjaśnienie
Przesyłanie zawartości skryptu „A” do skryptu,
wyświetli listę swoich podkatalogów (i plików). Następnie:
spróbuje wyświetlić zawartość każdego z (pod) folderów, co spowoduje błąd, jeśli element jest plikiem:
lub jeśli folder „Nagrywanie” w ogóle nie istnieje:
Jeśli folder „Nagrywanie” istnieje i jest pusty, folder nadrzędny jest usuwany:
EDYTOWAĆ
Dodatkowo, zgodnie z żądaniem w komentarzach, wersja, która będzie sprawdzać wiele podkatalogów (nazw).
W przypadku, gdy katalog zawiera którykolwiek z wymienionych (niepustych) podkatalogów, katalog zostaje zachowany. W przeciwnym razie zostanie usunięty.
Używać
delete_empty.py
Uruchom go z katalogiem (full!) (Zawierającym twoje podkatalogi, A w twoim przykładzie) i nazwami podkatalogów jako argumentami polecenia:
Otóż to.
Scenariusz
Uwaga
Najpierw uruchom katalog testowy, aby upewnić się, że działa dokładnie tak, jak chcesz.
źródło
Korzystanie
find
ixargs
:(usuń, gdy
echo
tylko poczujesz się komfortowo, że identyfikuje prawidłowe katalogi).printf '%h\0
Część drukuje (null zakończone) katalogu nadrzędnego - odman find
:Np .: dane
następnie
źródło
[\d]*
?Oto prostsze rozwiązanie bash:
Działa, ponieważ
rmdir
zawiedzie, jeśli katalog nie jest pusty, i&&
uniemożliwirm -r
wykonanie, chyba że sięrmdir
powiedzie. Glob*/
zapewnia, że pracujesz tylko nad katalogami, więc nie będzie to miało wpływu na inne pliki.źródło