Linux環境では、2つの関連する質問があります。
\
アスタリスク「*」でバックスラッシュを使用する必要がある場合は混乱します。 Unzip *.zip を実行しようとすると、エスケープするまでコマンドは失敗します。なぜですか?
developer@tz:~/f$ bash -version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
developer@tz:~/f$ unzip *.zip
Archive: abstract.zip
caution: filename not matched: date-function.zip
developer@tz:~/f$ unzip \*.zip
Archive: abstract.zip
inflating: abstract.xsl
Archive: date-function.zip
warning [date-function.zip]: zipfile is empty
1 archive was successfully processed.
1 archive had warnings but no fatal errors.
developer@tz:~/f$ ls *.zip
abstract.zip date-function.zip
developer@tz:~/f$ ls \*.zip
ls: cannot access '*.zip': No such file or directory
シングルライン機能に関する同様の質問です。
同じディレクトリにfoo.zipとbar.zipというzipファイルがあり、そうするときに両方のファイルを解凍する必要があるとします。
ls *.zip | xargs -IZIP basename -s .zip ZIP
上記のコマンドはkonsoleのfooとbarをリストしますが、実行すると次のようになります。
ls *.zip | xargs -IZIP unzip ZIP -d $( basename -s .zip ZIP )
デフォルトの結果を渡すと値が得られず、失敗するため機能しません。
- konsoleコマンドを呼び出すときはいつ「\」、「*」、またはその組み合わせを使用しますか?
- zipファイルの圧縮を一意の名前のディレクトリに解決するにはどうすればよいですか?
答え1
特に使用法によってはunzip
若干の混乱が発生する場合があります。それは呼ばれることができます
$ unzip x.zip file-1 file-2 file-3
この答えの残りの部分では、現在のディレクトリとfile-1
。x.zip
.zip
x.zip
y.zip
*
シェルがグローバル拡張(または同じワイルドカード?
)を実行すると、一致する各ファイルは別々の引数になります。だから
$ unzip *.zip
~になる
$ unzip x.zip y.zip
y.zip
この構文は「アーカイブからファイルを抽出するx.zip
」という意味です。複数のアーカイブを許可するためにunzip
ワイルドカードも処理されます。unzip
シェルの代わりにワイルドカードを処理するには、それを引用またはエスケープする必要があります。
$ unzip \*.zip
または
$ unzip '*.zip'