Aplanar una jerarquía de archivos de directorio anidado & desde la línea de comandos de Mac OS X
¿Alguna vez ha necesitado aplanar una estructura de directorios, moviendo todo el contenido de los archivos de las carpetas secundarias de un directorio a una sola carpeta? Si bien puede hacerlo 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 algún momento creó una jerarquía anidada de directorios que ahora necesita deshacer moviendo todos los archivos fuera de esas carpetas anidadas y de regreso a un solo directorio, o tal vez esté buscando simplificar una estructura de directorios, cualquiera que sea la razón, esto truco funciona bastante bien.
El uso de la línea de comandos para lograr el aplanamiento de archivos y estructuras de directorios es obviamente mejor reservado 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 del Finder , o usando la aplicación Mac Automator para lograr una automatización similar de las actividades del sistema de archivos. Sin embargo, aquí nos estamos enfocando en aplanar directorios desde la línea de comandos.
Ejemplo de acoplamiento de un directorio de archivos anidados
Para entender mejor lo que estamos tratando de lograr, tomemos un ejemplo de una estructura de directorio imaginaria 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 principal "TestDirectory".El directorio inicial y los contenidos que se muestran recursivamente con 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, usaría la siguiente cadena de comando:
find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'
Después de aplanar el contenido del directorio, debería tener este aspecto cuando aparezca en la lista:
~/TestDirectory/rooty.jpg ~/TestDirectory/beta-tool-preview.jpg ~/TestDirectory/alphabeta-tool.jpg ~/TestDirectory/test-tools .jpg ~/DirectorioPrueba/prueba-png.jpg ~/DirectorioPrueba/prueba1.jpg ~/DirectorioPrueba/prueba2.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 quiere lograr, probablemente no quiera aplanar un directorio en absoluto, tal vez esté buscando fusionar o usar ídem para hacer una copia compleja en otro lugar.
Aplanamiento de una estructura de directorios y una jerarquía de archivos anidados con la línea de comandos
¿Listo para continuar? La cadena de comando que vamos a utilizar para aplanar una estructura de directorios y mover todos los archivos de los subdirectorios a la base del directorio de destino es la siguiente:
find -min depth 2 -type f -exec mv -i '{}' ';'
Reemplace 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 comando, la primera vez es el directorio en el que se busca aplanar los subdirectorios y la segunda vez es 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 reubicarse todos los archivos en los directorios secundarios de los directorios de destino de vuelta 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+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 bash y zsh, un comentarista dejó este práctico truco en StackExcange 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!