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
eingebencd *
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
verwendencd */.
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
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 .