GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cd a un directorio de nombre desconocido en una ruta conocida?

Estoy tratando de automatizar la implementación de una aplicación web en desarrollo que se actualiza con frecuencia. La aplicación web viene en forma de archivo zip con nombre desconocido y esta estructura de directorio:

unknown_name.zip
  └── unknown_folder_name
     └──all_the_application_files

Necesito un script bash para:

  • eliminar todo el contenido de /var/www/ [hecho]
  • descomprima el archivo unknown_name.zip, en una ruta tmp determinada [hecho]
  • cd dentro de esa ruta tmp conocida [hecho]
  • cd dentro de unknown_folder_name extraído de unknown_name.zip
  • mover todos_los_archivos_de_la_aplicación a /var/www [fácil si resolvemos la viñeta anterior]

Importante:dentro del directorio tmp solo habrá un directorio, al que quiero ir. Mi script bash actual:

rm -r /var/www/*
unzip ./*.zip * -d /home/lese/tmp-deploy
cd /home/lese/tmp-deploy
# HERE I WOULD cd unknown_folder_name
mv * /var/www/

Respuesta aceptada:

Solución

Si está seguro de que hay exactamente un directorio y nada más (ninguna otra carpeta ni ningún otro archivo) en el directorio actual, puede ingresar a ese directorio con

cd *

Si sabe que solo hay un directorio, pero puede haber archivos que no sean de directorio ni enlaces simbólicos a directorio en el directorio actual, puede usar

cd */.

para seleccionar solo el directorio.

Explicación

Un solo * es expandido por el shell a una lista de todos los nombres de archivo (que incluye subdirectorios) en el directorio actual (excluyendo archivos ocultos, especialmente los directorios . y .. que siempre están ahí). Si lo único en el directorio actual es el subdirectorio para ingresar, esto se expandirá a

cd unknown_folder_name

y así hacer lo que quieras.

El truco con */. es que esto se expande al "directorio propio" (llamado . ) en cualquier subdirectorio, que por supuesto es el propio subdirectorio. Dado que los nombres de archivo nunca pueden contener un / , y suponiendo que solo hay un directorio, el único nombre al que se expandirá será unknown_folder_name/. , que por supuesto es el mismo directorio que unknown_folder_name .


Linux
  1. Recursión de enlace simbólico:¿qué hace que se "reinicie"?

  2. ¿Una forma rápida de incluir una ruta de directorio al llamar a Mv?

  3. ¿Cómo puedo crear un árbol de directorios en C++/Linux?

  4. Agregue un script bash a la ruta

  5. Error fatal:cuda.h:No existe tal archivo o directorio

Cómo agregar un directorio a PATH en Linux

Cómo agregar un directorio a PATH en Linux [Consejo rápido]

Ruta absoluta vs relativa en Linux:¿Cuál es la diferencia?

Linux:agregar un directorio a PATH

¿Cómo encontrar una ruta de directorio parcial?

¿Qué significa NT_STATUS_BAD_NETWORK_NAME en Samba?