Linux環境でのバックスラッシュとアスタリスクの使用について

Linux環境でのバックスラッシュとアスタリスクの使用について

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 )

デフォルトの結果を渡すと値が得られず、失敗するため機能しません。

  1. konsoleコマンドを呼び出すときはいつ「\」、「*」、またはその組み合わせを使用しますか?
  2. zipファイルの圧縮を一意の名前のディレクトリに解決するにはどうすればよいですか?

答え1

特に使用法によってはunzip若干の混乱が発生する場合があります。それは呼ばれることができます

$ unzip x.zip file-1 file-2 file-3

この答えの残りの部分では、現在のディレクトリとfile-1x.zip.zipx.zipy.zip

*シェルがグローバル拡張(または同じワイルドカード?)を実行すると、一致する各ファイルは別々の引数になります。だから

$ unzip *.zip

~になる

$ unzip x.zip y.zip

y.zipこの構文は「アーカイブからファイルを抽出するx.zip」という意味です。複数のアーカイブを許可するためにunzipワイルドカードも処理されます。unzipシェルの代わりにワイルドカードを処理するには、それを引用またはエスケープする必要があります。

$ unzip \*.zip

または

$ unzip '*.zip'

関連情報