GNU/Linux >> Linux Esercitazione >  >> Linux

CD in una directory con nome sconosciuto in un percorso noto?

Sto cercando di automatizzare la distribuzione di una webapp in fase di sviluppo che viene aggiornata frequentemente. La webapp si presenta sotto forma di un file zip con nome sconosciuto e questa struttura di directory:

unknown_name.zip
  └── unknown_folder_name
     └──all_the_application_files

Ho bisogno di uno script bash per:

  • rimuove tutto il contenuto di /var/www/ [fatto]
  • decomprimere l'archivio unknown_name.zip, in un determinato percorso tmp [fatto]
  • cd all'interno di quel percorso tmp noto [fatto]
  • cd all'interno del nome_cartella_sconosciuto estratto da nome_sconosciuto.zip
  • sposta tutti i_file_dell'applicazione in /var/www [facile se risolviamo il punto precedente]

Importante:all'interno della directory tmp ci sarà solo una directory, quella in cui voglio andare. Il mio attuale script bash:

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/

Risposta accettata:

Soluzione

Se sai per certo che c'è esattamente una directory e nient'altro (nessun'altra cartella e nessun altro file) nella directory corrente, puoi entrare in quella directory con

cd *

Se sai che c'è solo una directory, ma potrebbero esserci file non directory e non link simbolici alla directory nella directory corrente, puoi usare

cd */.

per selezionare solo la directory.

Spiegazione

Un unico * viene espanso dalla shell in un elenco di tutti i nomi di file (che include le sottodirectory) nella directory corrente (esclusi i file nascosti, in particolare le directory . e .. che ci sono sempre). Se l'unica cosa nella directory corrente è la sottodirectory da inserire, questa si espanderà in

cd unknown_folder_name

e quindi fai quello che vuoi.

Il trucco con */. è che questo si espande nella "directory self" (denominata . ) in qualsiasi sottodirectory, che è ovviamente la sottodirectory stessa. Poiché i nomi dei file non possono mai contenere un / , e presupponendo che ci sia solo una directory, l'unico nome a cui si espande sarà unknown_folder_name/. , che è ovviamente la stessa directory di unknown_folder_name .


Linux
  1. Ricorsività del collegamento simbolico:cosa lo rende "reimpostato"?

  2. Modo rapido per includere un percorso di directory quando si chiama Mv??

  3. Come posso creare un albero di directory in C++/Linux?

  4. Aggiungi uno script bash al percorso

  5. Rsync copia la directory corrente con il nome

Come aggiungere una directory a PATH in Linux

Come aggiungere una directory a PATH in Linux [con esempi]

Come aggiungere una directory a PATH in Linux [Suggerimento rapido]

Percorso assoluto vs relativo in Linux:qual è la differenza?

Linux:aggiungi una directory a PATH

Uso di / quando si usa cd