OSX/IOS

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

Terminal en OS X

¿Alguna vez ha necesitado aplanar la estructura de un directorio moviendo todo el contenido de un archivo desde una carpeta de copia de directorio a una sola carpeta? Aunque puede hacer esto manualmente moviendo archivos y carpetas desde el sistema de archivos en Mac OS X o Linux, una opción más rápida es ir a la línea de comandos. Tal vez en algún momento creó una jerarquía de directorios anidados que ahora necesita deshacer moviendo todos los archivos en esas carpetas anidadas hacia adelante y hacia atrás en un solo directorio, o tal vez esté buscando simplificar una estructura de directorio por cualquier motivo. El truco funciona bastante bien.


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

Ejemplo de acoplar un directorio de archivos anidado

Para comprender 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. Lo que queremos hacer aquí es aplanar la estructura del directorio moviendo todos los archivos del SubDirectorio (X) al directorio principal «TestDirectory». El directorio original y el contenido que se muestra de forma recursiva con él 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 este directorio y el contenido del 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 acoplado, debería verse así cuando se enumere:

~/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, solo estarán vacíos. ¿Tiene sentido? Si no es así, o si esto no demuestra lo que desea lograr, probablemente no desee aplanar un directorio en absoluto, es posible que desee fusionar o usar el mismo para hacer una copia compleja en otro lugar.

Acoplamiento de una estructura de directorios y una jerarquía de archivos anidados en la línea de comandos

¿Estás listo para continuar? La cadena de comando 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] ';'

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

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

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

Como se mencionó anteriormente, puede hacer esto en OS X Finder o al menos notar los cambios de archivo y carpeta en el Finder. La opción + clic en flechas pequeñas en la vista de Lista abre todos los subdirectorios, mostrando la jerarquía de carpetas de la siguiente manera:

Estructura de directorio anidado para aplanar como se muestra en el Finder de Mac OS X

Después de jugar una variedad de alternativas bash y zsh, este truco se dejó en manos de un comentarista de StackExcange y se ha convertido en el método más fácil y compatible. Si conoce una mejor manera de aplanar un directorio anidado, ¡háganoslo saber en los comentarios!

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar