6  Gestión de Archivos y Directorios

La gestión eficiente de archivos y directorios es esencial en bioinformática, donde trabajamos con grandes volúmenes de datos, múltiples versiones de archivos y estructuras de proyectos complejas.

Nota: Parte de los siguientes ejercicios se realizarán usando archivos de secuenciación y anotación de N. crassa v2 (Galagan et al. 2003)

6.1 Creación de archivos y directorios

6.1.1 touch - Crear archivos vacíos

touch es utilizado para cambiar la fecha y hora de última modificación de un archivo. También puede utilizarse para crear un archivo vacío.

# Crear un archivo vacío
touch archivo.txt

# Crear múltiples archivos
touch archivo1.txt archivo2.txt archivo3.txt

# Crear archivos con nombres específicos de bioinformática
touch secuencias.fasta
touch metadata.tsv
touch pipeline_config.yaml
touch analysis_log.txt

# Crear archivos con timestamp
touch experimento_$(date +%Y%m%d).log

Ejemplo:

# Asegurate estar en la carpeta class
# Crear archivos de prueba
touch genome_assembly.fasta
touch gene_annotations.gff3
touch protein_sequences.faa
touch analysis_parameters.txt

# Listamos los archivos esperadno encontrar los que creamoms
ls -lt

Resultado esperado:

drwxrwxr-x 2 david david  4096 May 26 14:54 Neucr2
-rw-rw-r-- 1 david david     0 May 26 12:56 protein_sequences.faa
-rw-rw-r-- 1 david david     0 May 26 12:56 analysis_parameters.txt
-rw-rw-r-- 1 david david     0 May 26 12:56 gene_annotations.gff3
-rw-rw-r-- 1 david david     0 May 26 12:56 genome_assembly.fasta
drwxr-xr-x 2 david david  4096 Nov 17  2015 creatures
drwxr-xr-x 5 david david  4096 Nov 17  2015 data
drwxr-xr-x 2 david david  4096 Nov 17  2015 Desktop
drwxr-xr-x 2 david david  4096 Nov 17  2015 molecules
drwxr-xr-x 3 david david  4096 Nov 17  2015 north-pacific-gyre
-rw-r--r-- 1 david david    86 Nov 17  2015 notes.txt
-rw-r--r-- 1 david david    32 Nov 17  2015 pizza.cfg
-rw-r--r-- 1 david david 21583 Nov 17  2015 solar.pdf
drwxr-xr-x 6 david david  4096 Nov 17  2015 writing

6.1.2 mkdir - Crear directorios

El comando mkdir (Make Directory) nos permite crear directorios

# Crear un directorio
mkdir nuevo_directorio

# Crear múltiples directorios
mkdir dir1 dir2 dir3

# Crear estructura de directorios anidados (-p crea padres si no existen)
mkdir -p proyecto/datos/raw
mkdir -p proyecto/datos/processed
mkdir -p proyecto/resultados/plots

Ejemplo:

# Crearmos una carpeta de prueba
mkdir -p project/{data/{raw_sequences,processed,metadata},scripts/{preprocessing,analysis},results/{diversity,taxonomy,figures},references}

# Verificar la estructura creada
tree project/

Resultado esperado:

project/
├── data
   ├── metadata
   ├── processed
   └── raw_sequences
├── references
├── results
   ├── diversity
   ├── figures
   └── taxonomy
└── scripts
    ├── analysis
    └── preprocessing

13 directories, 0 files

Opciones útiles de mkdir:

  • -p: crear directorios padre si no existen
  • -v: modo verbose (mostrar lo que se está creando)
  • -m: establecer permisos específicos

6.2 Copiado de archivos y directorios

6.2.1 cp - Copiar archivos y directorios

El comando cp (Copy) nos permite copiar archivos y directorios

# Copiar un archivo
cp archivo_original.txt copia_archivo.txt

# Copiar a otro directorio
cp secuencias.fasta /ruta/destino/

# Copiar múltiples archivos a un directorio
cp *.fasta *.fastq /datos/backup/

# Copiar manteniendo atributos originales
cp -p archivo.txt copia_con_atributos.txt

# Copiar directorios recursivamente
cp -r directorio_origen/ directorio_destino/

# Copiar con modo interactivo (pregunta antes de sobrescribir)
cp -i archivo.txt destino.txt

Ejemplo:

# Copiar un archivo de mi lugar a otro lugar
cp protein_sequences.faa project/data/.

# Copiar una carpeta de otro lugar a mi lugar
cp -r project/results/ .

# Copiar una carpeta de otro lugar a otro lugar
cp -r project/references project/data/.

# Verificamos
tree project/ results/

Resultado esperado:

project/
├── data
   ├── metadata
   ├── processed
   ├── protein_sequences.faa
   ├── raw_sequences
   └── references
├── references
├── results
   ├── diversity
   ├── figures
   └── taxonomy
└── scripts
    ├── analysis
    └── preprocessing
results/
├── diversity
├── figures
└── taxonomy

18 directories, 1 file

Opciones útiles de cp:

  • -r o -R: copia recursiva (para directorios)
  • -p: preservar atributos (permisos, timestamps)
  • -i: modo interactivo - -v: modo verbose
  • -u: copiar solo si el archivo fuente es más nuevo

6.3 Movimiento y renombrado

6.3.1 mv - Mover y renombrar archivos

El comando mv nos permite mover (Move) o renombrar archivos o directorios

# Renombrar un archivo
mv nombre_viejo.txt nombre_nuevo.txt

# Mover archivo a otro directorio
mv archivo.txt /otro/directorio/

# Mover y renombrar simultáneamente
mv datos_crudos.csv datos/raw/experimento_01.csv

# Mover múltiples archivos
mv *.fastq datos/secuencias/

# Mover directorios
mv proyecto_viejo/ proyectos/proyecto_renombrado/

Ejemplo:

# Movemos archivos
mv gene_annotations.gff3 project/data/.
mv genome_assembly.fasta project/data/.
mv protein_sequences.faa project/results/.
mv analysis_parameters.txt project/references/.

# Movemos carpetas
mv results project/data/.

# Cambiamos el nombre de una carpeta
mv project/data/results/ project/data/results_v2

# Verificamos
tree project

Resultado esperado:

project/
├── data
   ├── gene_annotations.gff3
   ├── genome_assembly.fasta
   ├── metadata
   ├── processed
   ├── protein_sequences.faa
   ├── raw_sequences
   ├── references
   └── results_v2
       ├── diversity
       ├── figures
       └── taxonomy
├── references
   └── analysis_parameters.txt
├── results
   ├── diversity
   ├── figures
   ├── protein_sequences.faa
   └── taxonomy
└── scripts
    ├── analysis
    └── preprocessing

18 directories, 5 files

6.4 Eliminación de archivos y directorios

6.4.1 rm - Eliminar archivos y directorios

⚠️ PRECAUCIÓN: El comando rm elimina (Remove) permanentemente. No hay papelera de reciclaje.

# Eliminar un archivo
rm archivo_innecesario.txt

# Eliminar múltiples archivos
rm archivo1.txt archivo2.txt

# Eliminar con confirmación
rm -i archivo_importante.txt

# Eliminar archivos por patrón
rm *.tmp
rm *_backup.*

# Eliminar directorios vacíos
rmdir directorio_vacio/

# Eliminar directorios con contenido
rm -r directorio_completo/

# Eliminar forzadamente (sin confirmación)
rm -rf directorio/  # ¡MUY PELIGROSO!

Ejemplo:

# Asegurate de estar dentro de la caperta class
# Eliminamos archivos
rm -rf project/data

# Verificamos
tree project/

Resultado esperado:

project/
├── references
   └── analysis_parameters.txt
├── results
   ├── diversity
   ├── figures
   ├── protein_sequences.faa
   └── taxonomy
└── scripts
    ├── analysis
    └── preprocessing

9 directories, 2 files

Ejemplo:

ls
rm -rf project/
ls

Resultado esperado:

creatures  data  Desktop  molecules  Neucr2  north-pacific-gyre  notes.txt  pizza.cfg  solar.pdf  writing

Opciones importantes de rm:

  • -i: modo interactivo (pregunta antes de eliminar)
  • -r o -R: eliminación recursiva (directorios)
  • -f: forzar eliminación sin preguntar
  • -v: modo verbose

6.5 Manejo Seguro de Archivos

6.5.1 Crear copias de seguridad antes de operaciones importantes

  • Cuando inicias un proyecto con grandes cantidades de datos, se recomienda crear una copia de seguridad de los datos originales, y trabajar con los datos que se copiaron, por si se comete algún error y se modifican estos archivos, siempre tendrás la copia original.

  • En lugar de eliminar una carpeta, una posible opción de seguridad, es crear primero una carpeta basura donde lo que desees eliminar, lo muevas a esta carpeta. Y cuando finalices tu proyecto, ahora si puedes eliminar todo lo que hayas movido a esa carpeta.

6.6 Casos de uso prácticos en bioinformática

6.6.1 Ejemplo 1: Organización de datos de secuenciación

# Crear estructura de proyecto
mkdir -p seq_project/{raw_data,processed_data,results,scripts,metadata}

# Simular llegada de datos de secuenciación
touch sample_{01..10}_R{1,2}.fastq.gz

# Organizar por tipo de muestra
mkdir -p seq_project/raw_data/{control,treatment}
mv sample_0{1..5}* seq_project/raw_data/control/
mv sample_0{6..9}* seq_project/raw_data/treatment/
mv sample_10* seq_project/raw_data/treatment/

# Crear metadatos
touch seq_project/metadata/sample_info.tsv
touch seq_project/metadata/experimental_design.txt

6.6.2 Ejemplo 2: Gestión de ensamblajes de genomas

# Crear directorio para diferentes versiones de ensamblaje
mkdir -p genome_assembly/{version_1.0,version_1.1,version_2.0,final}

# Crear archivos
touch assembly_draft.fasta assembly_improved.fasta assembly_polished.fasta

# Copiar ensamblajes a versiones específicas
cp assembly_draft.fasta genome_assembly/version_1.0/
cp assembly_improved.fasta genome_assembly/version_1.1/
cp assembly_polished.fasta genome_assembly/version_2.0/

# Crear enlaces a la versión final
ln -s version_2.0/assembly_polished.fasta genome_assembly/final/genome_final.fasta

6.7 Consejos y Buenas Prácticas

  1. Siempre hacer backup: Antes de operaciones destructivas
  2. Verificar antes de eliminar: Usar ls para confirmar qué se va a eliminar
  3. Usar modo interactivo: -i en operaciones críticas
  4. Organización consistente: Mantener estructura similar en todos los proyectos
  5. Documentar cambios: Llevar log de reorganizaciones importantes

6.8 Resumen de Comandos

Comando Función Ejemplo Clave
touch Crear archivos vacíos touch sequences.fasta
mkdir Crear directorios mkdir -p data/{raw,processed}
cp Copiar archivos/directorios cp -r data/ backup/
mv Mover/renombrar mv old_name.txt new_name.txt
rm Eliminar archivos rm -i temp_files/*
rmdir Eliminar directorios vacíos rmdir empty_folder/