Aplanar un directorio anidado y una jerarquía de archivos desde la línea de comandos de Mac OS X

¿Alguna vez ha necesitado aplanar la estructura de un directorio, moviendo todo el contenido del archivo de las carpetas secundarias de un directorio a una sola carpeta? Si bien puede hacer esto manualmente moviendo archivos y carpetas desde el sistema de archivos de Mac OS X o Linux, una opción más rápida es recurrir a la línea de comandos. Tal vez en un momento creó una jerarquía anidada de directorios que ahora necesita deshacer moviendo todos los archivos fuera de esas carpetas anidadas y de nuevo a un solo directorio, o tal vez esté buscando simplificar una estructura de directorio, cualquiera sea la razón, esto truco funciona bastante bien.



El uso de la línea de comandos para lograr el acoplamiento de archivos y estructuras de directorios obviamente es mejor reservarlo para usuarios avanzados que se sienten cómodos con el uso de la terminal en general, si eso no lo describe, considere hacerlo manualmente a través de Finder o usar la aplicación Mac Automator para lograr una automatización similar de las actividades del sistema de archivos.
Sin embargo, aquí nos centramos en el acoplamiento de directorios desde la línea de comandos.

Ejemplo de acoplamiento de un directorio de archivos anidado

Para comprender mejor lo que estamos tratando de lograr, tomemos una estructura de directorio imaginaria de ejemplo llamada TestDirectory ubicada en la carpeta de inicio de un usuario. En este ejemplo, TestDirectory contiene subcarpetas como SubDirectory1, SubDirectory2, SubDirectory3, etc., cada una con archivos en esas carpetas respectivas. Lo que buscamos hacer aquí es aplanar la estructura del directorio, moviendo todos los archivos del SubDirectorio (X) al directorio padre «TestDirectory». El directorio inicial y el contenido que se muestran de forma recursiva con el podrían verse así:

$ 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

Para aplanar el contenido de este directorio y subdirectorio en la carpeta TestDirectory, debe usar la siguiente cadena de comando:

find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'

Una vez que el contenido del directorio se ha aplanado, debería verse así cuando se enumera:

~/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

Tenga en cuenta que los subdirectorios seguirán existiendo, simplemente estarán vacíos. ¿Tener sentido? Si no es así, o si eso no demuestra lo que desea lograr, probablemente no desee aplanar un directorio en absoluto, tal vez esté buscando fusionar o usar ditto para hacer una copia compleja en otro lugar.

Acoplamiento de una estructura de directorio y una jerarquía de archivos anidados con la línea de comandos

¿Listo para continuar? La cadena de comandos que usaremos para aplanar una estructura de directorio y mover todos los archivos de los subdirectorios a la base del directorio de destino es la siguiente:

find [DIRECTORY] -mindepth 2 -type f -exec mv -i '{}' [DIRECTORY] ';'

Reemplace [DIRECTORIO] con el directorio de su elección para aplanar, como se muestra en el ejemplo anterior.

Sí, el directorio aparece dos veces en la cadena de comandos, la primera vez es el directorio que se busca para aplanar los subdirectorios y la segunda vez como el destino de los elementos encontrados.

Sea preciso con el destino especificado, porque esto no es reversible (bueno, al menos sin mucho trabajo manual de su parte), así que solo haga esto si está absolutamente seguro de que desea reubicar todos los archivos en los directorios de destino child directorios de nuevo a la carpeta raíz de destino.

Como se mencionó anteriormente, también puede hacer esto en el Finder de OS X, o al menos observar los cambios de archivos y carpetas en el Finder. Opción + hacer clic en las flechas pequeñas en la vista de Lista abre todos los subdirectorios, mostrando la jerarquía de carpetas así:

Después de jugar con una variedad de alternativas de bash y zsh, un comentarista de StackExcange dejó este truco útil y terminó siendo el método más fácil y compatible. Si conoce una forma mejor de aplanar un directorio anidado, ¡háganoslo saber en los comentarios!

¡Si te ha gustado vota con 5 Estrellas!
(Votos: 0 Promedio: 0)

Escribe Aquí Tu Comentario