頻繁に更新される開発中のWebアプリのデプロイを自動化しようとしています。 Webアプリは、名前が不明なzipファイルの形式で提供され、このディレクトリ構造は次のとおりです。
unknown_name.zip
└── unknown_folder_name
└──all_the_application_files
次のようなbashスクリプトが必要です:
- / var / www/[完了]のすべての内容を削除します
- 指定されたtmpパスでunknown_name.zipアーカイブを解凍します[完了]
- 既知のtmpパス内のcd[完了]
- unknown_name.zipから抽出されたunknown_folder_name内のcd
- all_the_application_filesを/var/wwwに移動します[前の箇条書きを解決すれば簡単です]
重要:tmpディレクトリ内には、内部に入れたいディレクトリが1つだけあります。私の現在の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/
承認された回答:
解決策
現在のディレクトリにディレクトリが1つだけあり、他に何もない(他のフォルダも他のファイルもない)ことが確実にわかっている場合は、
を使用してそのディレクトリに入ることができます。cd *
ディレクトリが1つしかないことがわかっているが、現在のディレクトリに非ディレクトリファイルと非シンボリックリンクファイルがある可能性がある場合は、
を使用できます。cd */.
ディレクトリのみを選択します。
説明
単一の*
シェルによって、現在のディレクトリ(非表示のファイル、特にディレクトリ.
を除く)内のすべてのファイル名(サブディレクトリを含む)のリストに展開されます。 および..
常にそこにあります)。現在のディレクトリにある唯一のものが入力するサブディレクトリである場合、これは
cd unknown_folder_name
したがって、やりたいことを実行します。
*/.
のトリック これは「自己ディレクトリ」(.
という名前)に展開されるということです。 )任意のサブディレクトリ(もちろんサブディレクトリ自体)。ファイル名に/
を含めることはできないため 、およびディレクトリが1つしかないことを前提とすると、ディレクトリが展開される名前はunknown_folder_name/.
、もちろんunknown_folder_name
と同じディレクトリです 。