Guardando gli esempi da kch, dB. e Vishnu sopra, ho messo insieme una battuta che penso sia una soluzione più elegante:
Dir['**/'].reverse_each { |d| Dir.rmdir d if Dir.entries(d).size == 2 }
io uso '**/'
invece di '/**/*'
per il glob, che restituisce solo directory, quindi non ho per verificare se è una directory più tardi. Sto usando reverse_each
invece di sort.reverse.each
in quanto è più breve e presumibilmente più efficiente, secondo questo post. Io preferisco Dir.entries(d).size == 2
a (Dir.entries(d) - %w[ . .. ]).empty?
perché è un po 'più facile da leggere e capire, anche se lo (Dir.entries(d) - %w[ . .. ]).empty?
probabilmente funzionerebbe meglio se dovessi eseguire il tuo script su Windows.
Ho provato un po 'su Mac OS X e funziona bene, anche con le directory vuote ricorsive.
primo pensiero: sistema "trova. -type d | xargs rmdir -p 2>/dev/null" – kch
Solo una nota, non voglio fare questa operazione in un colpo dalla riga di comando. Sarà scritto in un rubino. Quello che hai sopra è una versione della linea cmd no? –
beh, è un comando di shell, sì, ma invocato dall'interno di ruby usando 'Kernel.system';) – kch