Patrząc na przykłady z kch, dB. Wisznu i powyżej, jakie zebrała jedną wkładkę, która moim zdaniem jest bardziej eleganckie rozwiązanie:
Dir['**/'].reverse_each { |d| Dir.rmdir d if Dir.entries(d).size == 2 }
używam '**/'
zamiast '/**/*'
do glob, który zwraca tylko katalogi, więc nie mam aby sprawdzić, czy jest to katalog później. Używam reverse_each
zamiast sort.reverse.each
, ponieważ jest krótszy i podobno bardziej wydajny, zgodnie z tym post. Wolę od Dir.entries(d).size == 2
do (Dir.entries(d) - %w[ . .. ]).empty?
, ponieważ jest to nieco łatwiejsze do odczytania i zrozumienia, chociaż prawdopodobnie działałby lepiej, gdybyś musiał uruchomić skrypt w systemie Windows.
Przetestowałem to całkiem sporo na Mac OS X i działa dobrze, nawet z rekurencyjnymi pustymi katalogami.
pierwsza myśl: system "znajdź. -type d | xargs rmdir -p 2>/dev/null" – kch
Tylko uwaga, nie chcę wykonywać tej operacji jednym strzałem z linii poleceń. Będzie w rubinowym skrypcie. Co masz powyżej jest wersja wiersza cmd nie? –
cóż, jest to polecenie powłoki, tak, ale wywoływane z poziomu ruby przy użyciu 'Kernel.system';) – kch