GNU/Linux >> Znalost Linux >  >> Linux

CD do neznámého adresáře na známé cestě?

Snažím se automatizovat nasazení webové aplikace ve vývoji, která je často aktualizována. Webová aplikace je dodávána ve formě souboru zip s neznámým názvem a touto adresářovou strukturou:

unknown_name.zip
  └── unknown_folder_name
     └──all_the_application_files

Potřebuji bash skript k:

  • odstraňte veškerý obsah /var/www/ [hotovo]
  • rozbalte archiv neznámého_jméno.zip v dané cestě tmp [hotovo]
  • cd uvnitř této známé cesty tmp [hotovo]
  • cd uvnitř neznámého_název_složky extrahované z neznámého_název.zip
  • přesunout all_the_application_files do /var/www [snadno, pokud vyřešíme předchozí odrážku]

Důležité:uvnitř adresáře tmp bude pouze jeden adresář, ten, do kterého chci jít. Můj aktuální bash skript:

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/

Přijatá odpověď:

Řešení

Pokud s jistotou víte, že v aktuálním adresáři je přesně jeden adresář a nic jiného (žádná další složka a žádný jiný soubor), můžete do tohoto adresáře vstoupit pomocí

cd *

Pokud víte, že existuje pouze jeden adresář, ale v aktuálním adresáři mohou být soubory bez adresáře a bez symbolických odkazů na adresář, můžete použít

cd */.

pro výběr pouze adresáře.

Vysvětlení

Jeden * je shellem rozšířen na seznam všech názvů souborů (včetně podadresářů) v aktuálním adresáři (kromě skrytých souborů, zejména adresářů . a .. které jsou tam vždy). Pokud je jedinou věcí v aktuálním adresáři podadresář, který je třeba zadat, rozbalí se na

cd unknown_folder_name

a tak si dělejte, co chcete.

Trik s */. spočívá v tom, že se to rozšíří na „samo adresář“ (pojmenovaný . ) v libovolném podadresáři, což je samozřejmě podadresář samotný. Protože názvy souborů nikdy nemohou obsahovat / a za předpokladu, že existuje pouze jeden adresář, jediný název, na který se rozbalí, bude unknown_folder_name/. , což je samozřejmě stejný adresář jako unknown_folder_name .


Linux
  1. Počítání počtu souborů v adresáři pomocí C

  2. Závažná chyba:cuda.h:Žádný takový soubor nebo adresář

  3. Mohu přidat zkratku pro nahrazení cesty v Linuxu?

  1. Rsync kopíruje aktuální adresář s názvem

  2. Použití / při použití cd

  3. Jak najít částečnou cestu k adresáři?

  1. Rychlý způsob, jak zahrnout cestu k adresáři při volání Mv?

  2. Získat úplnou cestu ze skriptu Bash?

  3. Jak mohu vytvořit strom adresářů v C++/Linux?