目的:
a.zip
unzip
onコマンドを使用してアーカイブを展開し、展開したUbuntu 12.10
フォルダの名前を変数a.zip
に割り当てます。bash
v
a.zip
複数のフォルダではなく単一のフォルダへの拡張を想定して保証します。
例:
unzip a.zip
フォルダに展開された場合は返す必要があります./foo/
。echo $v
foo
私の環境:
GNU/Linux (kernel 3.5.0-25-generic)
Ubuntu 12.10
bash v4.2.37(1)-release
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
私の現在のソリューションは不幸with:Expand via unzip -d bar a.zip
thenはv=$(ls -1 bar)
正しい結果を提供しますが、ファイルシステムを混乱させます。
ベストアンサー1
ここにあります:
v=$(unzip a.zip | grep -m1 'creating:' | cut -d' ' -f5-)
説明する
$(...)
キャプチャシェルです。その中のコマンドの出力をキャプチャして変数のように置き換えます。- コマンドの出力は
unzip
にパイプされてgrep
引数が渡され、-m1
最初の結果のみが返され、creating:
ディレクトリが生成されたときにstdoutに印刷されるテキストの一部であるtextが返されます。パイプで接続された stdout で印刷します。unzip
grep
creating: foo/
cut
cut
2番目の列の後のすべての列を印刷するために使用されます(スペースで区切られています)。単語creating:
の前にスペースがあるため、5から行末までを指定します。ディレクトリ名にスペースが含まれている場合は、行の最後まですべての列を使用しようとします。最終出力はfoo/
。