Técnica electrónica > Móvil > Consejos y trucos > IOS > Acoplar una jerarquía de directorios anidados y archivos desde la línea de comandos de OS X

Acoplar una jerarquía de directorios anidados y archivos desde la línea de comandos de OS X


¿Alguna vez se necesita para aplanar una estructura de directorios, mover todos los contenidos de los archivos de los directorios de carpetas secundarias en una sola carpeta? Mientras que usted puede hacer esto manualmente moviendo en torno a los archivos y carpetas del sistema de archivos de Mac OS X o Linux, una opción más rápida es a su vez a la línea de comandos. Tal vez en un momento que ha creado un entramado jerárquico de directorios que ahora tiene que deshacer moviendo todos los archivos de esas carpetas anidadas y de nuevo en un solo directorio, o tal vez usted está buscando para simplificar una estructura de directorios, cualquiera que sea la razón, esta truco funciona bastante bien.

Uso de la línea de comandos para llevar a cabo aplanamiento de archivos y estructuras de directorio es obviamente mejor reservada a usuarios avanzados que se sienten cómodos con el uso de la terminal, en general, si eso no es su caso, considerar hacerlo de forma manual a través del Finder, o mediante la aplicación de Mac Automator para lograr la automatización similar de las actividades del sistema de archivos. Nos estamos centrando en el directorio de aplanamiento desde la línea de comandos aquí, sin embargo.

Ejemplo de aplanar un directorio de archivos anidados

Para entender mejor lo que estamos tratando de lograr, vamos a tomar un ejemplo imaginario estructura de directorio llamado TestDirectory encuentra en una carpeta de usuario de inicio. En este ejemplo, TestDirectory contiene subcarpetas como SubDirectory1, SubDirectory2, SubDirectory3, etc, cada uno con archivos de esas carpetas respectivas. Lo que estamos buscando hacer aquí es aplanar la estructura de directorios, mover todos los archivos del subdirectorio (X) al directorio padre "TestDirectory". El directorio inicial y el contenido se muestra de forma recursiva con el podría ser algo como esto:

$ 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

To aplanar este directorio y subdirectorio contenidos a cabo de nuevo en la carpeta TestDirectory, se utilizaría la siguiente cadena de comandos:

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

Después el contenido del directorio se han aplanado, que debería tener este aspecto cuando aparece out:

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

Note serán todavía existen los subdirectorios, pero serán vacía. ¿Tener sentido? Si no es así, o si eso no demuestra lo que quiere lograr, es probable que no quiere aplanar un directorio en absoluto, tal vez usted está buscando para fusionar o uso ídem hacer una copia compleja a otra parte.

El aplanamiento de una estructura de directorios de archivos y jerarquía anidada con la línea de comandos

listo para proceder? La cadena de comandos que vamos a utilizar para aplanar una estructura de directorios y mover todos los archivos de subdirectorios a la base del directorio de destino es el siguiente:

encontrar [directorio] -mindepth 2 type f -exec mv -i '{}' [directorio] ';'

Reemplazar [directorio] con el directorio de su elección para aplanar, como se demuestra en el ejemplo anterior.

Sí, el directorio aparece dos veces en la cadena de comando, la primera vez es el directorio que está siendo buscado para aplanar los subdirectorios, y la segunda vez como el destino de los objetos que encuentres.

Sea preciso con el destino especificado, porque esto no es reversible (bueno, al menos sin una gran cantidad de trabajo manual de su parte), por lo que sólo hacer esto si está absolutamente seguro de que desea trasladar toda la archivos en el niño directorios de destino directorios de nuevo a la carpeta raíz de destino.

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



Después de tocar el violín con una variedad de alternativas de bash y zsh, este truco útil se dejó por un comentarista en StackExcange y terminó siendo el método más fácil y más compatible. Si usted sabe de una mejor manera para aplanar un directorio anidado, háganoslo saber en los comentarios!