Appiattisci una directory nidificata & Gerarchia di file dalla riga di comando di Mac OS X
Hai mai avuto bisogno di appiattire la struttura di una directory, spostando tutti i contenuti dei file dalle cartelle secondarie di una directory in un'unica cartella? Mentre puoi farlo manualmente spostando file e cartelle dal file system di Mac OS X o Linux, un'opzione più veloce è passare alla riga di comando. Forse a un certo punto hai creato una gerarchia nidificata di directory che ora devi annullare spostando tutti i file fuori da quelle cartelle nidificate e riportandoli in una singola directory, o forse stai cercando di semplificare una struttura di directory, qualunque sia la ragione, questo trucco funziona abbastanza bene.
L'uso della riga di comando per eseguire l'appiattimento di file e strutture di directory è ovviamente riservato agli utenti avanzati che hanno dimestichezza con l'utilizzo del terminale in generale, se questo non ti descrive, considera di farlo manualmente tramite Finder o utilizzando l'app Mac Automator per eseguire un'automazione simile delle attività del file system. Tuttavia, qui ci stiamo concentrando sull'appiattimento delle directory dalla riga di comando.
Esempio di appiattimento di una directory di file nidificati
Per capire meglio cosa stiamo cercando di realizzare, prendiamo un esempio di struttura di directory immaginaria chiamata TestDirectory che si trova in una cartella Home dell'utente. In questo esempio, TestDirectory contiene sottocartelle come SubDirectory1, SubDirectory2, SubDirectory3, ecc., ciascuna con i file nelle rispettive cartelle. Quello che stiamo cercando di fare qui è appiattire la struttura della directory, spostando tutti i file da SubDirectory(X) alla directory principale "TestDirectory".La directory iniziale e i contenuti mostrati ricorsivamente con potrebbero essere simili a questo:
$ find ~/TestDirectory/ -type f ~/TestDirectory/rooty.jpg ~/TestDirectory/SampleDirectory1/beta-tool-preview.jpg ~/TestDirectory/SampleDirectory1 /alphabeta-tool.jpg ~/TestDirectory/SampleDirectory2/test-tools.jpg ~/TestDirectory/SampleDirectory3/test-png.jpg ~/TestDirectory/SampleDirectory3/test1.jpg ~/TestDirectory/SampleDirectory3/test2.jpg
Per appiattire i contenuti di questa directory e sottodirectory nella cartella TestDirectory, utilizzare la seguente stringa di comando:
find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'
Dopo che il contenuto della directory è stato appiattito, dovrebbe apparire così quando elencato:
~/TestDirectory/rooty.jpg ~/TestDirectory/beta-tool-preview.jpg ~/TestDirectory/alphabeta-tool.jpg ~/TestDirectory/test-tools .jpg ~/TestDirectory/test-png.jpg ~/TestDirectory/test1.jpg ~/TestDirectory/test2.jpg
Nota che le sottodirectory esisteranno ancora, saranno solo vuote. Ha senso? In caso contrario, o se ciò non dimostra ciò che vuoi ottenere, probabilmente non vuoi appiattire affatto una directory, forse stai cercando di unire o usare idem per fare una copia complessa altrove.
Appiattimento di una struttura di directory e gerarchia di file nidificati con la riga di comando
Pronto a procedere? La stringa di comando che useremo per appiattire una struttura di directory e spostare tutti i file dalle sottodirectory alla base della directory di destinazione è la seguente:
find -mindepth 2 -type f -exec mv -i '{}' ';'
Sostituisci con la directory di tua scelta da appiattire, come mostrato nell'esempio precedente.
Sì, la directory appare due volte nella stringa di comando, la prima volta è la directory in cui eseguire la ricerca per semplificare le sottodirectory e la seconda volta come destinazione degli elementi trovati.
Sii preciso con la destinazione specificata, perché questo non è reversibile (beh, almeno senza molto lavoro manuale da parte tua), quindi fallo solo se sei assolutamente sicuro di volerti trasferire tutti i file nelle directory figlie delle directory di destinazione nella cartella principale di destinazione.
Come detto prima, puoi farlo anche nel Finder di OS X, o almeno osservare i cambiamenti di file e cartelle nel Finder. Opzione + clic sulle piccole frecce nella visualizzazione Elenco si aprono tutte le sottodirectory, mostrando la gerarchia delle cartelle in questo modo:
Dopo aver giocherellato con una varietà di alternative bash e zsh, questo utile trucco è stato lasciato da un commentatore su StackExcange ed è finito per essere il metodo più semplice e compatibile. Se conosci un modo migliore per appiattire una directory nidificata, faccelo sapere nei commenti!