GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Cd in ein namensunbekanntes Verzeichnis in einem bekannten Pfad?

Ich versuche, die Bereitstellung einer in der Entwicklung befindlichen Webapp zu automatisieren, die häufig aktualisiert wird. Die Webapp kommt in Form einer ZIP-Datei mit unbekanntem Namen und dieser Verzeichnisstruktur:

unknown_name.zip
  └── unknown_folder_name
     └──all_the_application_files

Ich brauche ein Bash-Skript, um:

  • entferne den gesamten Inhalt von /var/www/ [fertig]
  • entpacken Sie das Archiv unknown_name.zip in einem angegebenen tmp-Pfad [erledigt]
  • cd in diesem bekannten tmp-Pfad [erledigt]
  • cd innerhalb des unknown_folder_name, extrahiert aus der unknown_name.zip
  • verschiebe all_the_application_files nach /var/www [einfach, wenn wir den vorherigen Aufzählungspunkt lösen]

Wichtig:Innerhalb des tmp-Verzeichnisses wird es nur ein Verzeichnis geben, dasjenige, in das ich gehen möchte. Mein aktuelles 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/

Akzeptierte Antwort:

Lösung

Wenn Sie sicher sind, dass sich im aktuellen Verzeichnis genau ein Verzeichnis und sonst nichts (kein anderer Ordner und keine andere Datei) befindet, können Sie dieses Verzeichnis mit

eingeben
cd *

Wenn Sie wissen, dass es nur ein Verzeichnis gibt, aber möglicherweise Nicht-Verzeichnis- und Nicht-Symlink-to-Directory-Dateien im aktuellen Verzeichnis, können Sie

verwenden
cd */.

um nur das Verzeichnis auszuwählen.

Erklärung

Ein einzelner * wird von der Shell zu einer Liste aller Dateinamen (inklusive Unterverzeichnissen) im aktuellen Verzeichnis erweitert (ausgenommen versteckte Dateien, insbesondere die Verzeichnisse .). und .. die immer da sind). Wenn das einzige, was im aktuellen Verzeichnis das einzugebende Unterverzeichnis ist, wird dieses zu

erweitert
cd unknown_folder_name

und mach damit, was du willst.

Der Trick mit */. ist, dass dies zum „self-Verzeichnis“ (mit dem Namen . ) in einem beliebigen Unterverzeichnis, das natürlich das Unterverzeichnis selbst ist. Da Dateinamen niemals einen / enthalten dürfen , und unter der Annahme, dass es nur ein Verzeichnis gibt, ist der einzige Name, zu dem es erweitert wird, unknown_folder_name/. , was natürlich dasselbe Verzeichnis wie unknown_folder_name ist .


Linux
  1. Erstellen eines neuen Verzeichnisses in C

  2. Fügen Sie dem Pfad ein Bash-Skript hinzu

  3. Schwerwiegender Fehler:cuda.h:Keine solche Datei oder Verzeichnis

  4. Rsync kopiert aktuelles Verzeichnis mit Namen

  5. Verwendung von / bei Verwendung von CD

So fügen Sie ein Verzeichnis zu PATH in Linux hinzu

So fügen Sie ein Verzeichnis zu PATH in Linux hinzu [Kurztipp]

Absoluter vs. relativer Pfad in Linux:Was ist der Unterschied?

Linux:Fügen Sie PATH ein Verzeichnis hinzu

Zählen der Anzahl der Dateien in einem Verzeichnis mit C

Kann ich eine Verknüpfung hinzufügen, um einen Pfad in Linux zu ersetzen?