web-dev-qa-db-ja.com

.Zipファイル内のルートディレクトリにあるフォルダの名前を確認します

シェルとしてFedora17とbashを使用しています。ルートにフォルダが1つしかない特定のZipファイルがあります。つまりZipファイルを解凍すると、次のように表示されます。

> unzip myzip.Zip
> ls
myzip.Zip folderThatWasInsideZip

Zipファイルにパックされているフォルダが1つしかないことを知っているとしたら、どうすればわかりますか zipファイル内のメインフォルダの名前、実際にZipファイルを解凍せずに?

私は次のようなことを可能にするワンライナーを探しています:

> <command> myzip.Zip
folderThatWasInsideZip

Zip内のすべてのファイルをlessで一覧表示する方法があることは知っていますが、サブディレクトリなどのすべてのファイルを一覧表示します。1つのフォルダーの名前を知りたいだけです。私は基本的な何かが欠けていることを知っています。

3
Jan Hrcek

このコマンドはあなたが望むことをするようです:

unzip -qql myzip.Zip | head -n1 | tr -s ' ' | cut -d' ' -f5-

またはGNU sed:

unzip -qql myzip.Zip | sed -r '1 {s/([ ]+[^ ]+){3}\s+//;q}'
3
Thor

unzip -ZZipinfoモード を呼び出します。これは、同じ結果に対してunzip -Z -1 myzip.Zip | head -1を呼び出すことができることを意味しますが、はるかに簡潔です。

3
jaygooby

次のシェルコマンドでそれを行うことができます:

unzip -qql myzip.Zip | head -n1 | awk '{print $4}'

これは、UNIXコマンドパイプラインです。 unzip -qqlZipファイル内のファイルを一覧表示します。 head -n1は最初の行を切り取り、awk '{print $4}'は4番目のWordを出力します。

Zipファイルの最初のエントリにスペースが含まれていると正しく機能しないことに注意してください。通常、このようなコマンドの出力を処理することは悪い習慣ですが、迅速で汚い解決策としては問題ないかもしれません。