アーカイブのワイルドカード文字にはファイルが含まれています。

アーカイブのワイルドカード文字にはファイルが含まれています。

Create Backupを使用すると、インクルードファイルrsync --include-from=inclusion-fileはワイルドカードをサポートしているため、+ .*rcホームディレクトリに任意のリソースファイルを含めることができます。

Zipはファイルの埋め込みもサポートしていますが、ワイルドカードは機能しないため、各ファイル名を入力する必要があります。 (私はこれがバグか奇妙な欠点だと言いたいのですが、誰かが少し明かすことができますか?)

$ cat files
.*rc
$ ls .*rc
.ackrc  .bashrc  .mailrc
$ zip -@ out < files
    zip warning: name not matched: .*rc

ワイルドカードを操作する方法を知っている人はいますか?私が考えることができる唯一の回避策は、コマンドライン自体にワイルドカードパターンを配置することです。zip -@ out < files *.rc

この質問は、すべてのUNIXアーカイブツールを表します。郵便番号が優先されますが、必須ではありません。

答え1

7z(から7つのジッパー)はリストファイルでワイルドカードを使用します(独自のファイルに加えてZIP形式のファイルを生成できます)。

答え2

テキストファイル名が必要なオプションの評価がzip正しいようです。-@私の文書は続きます。

Unixでは、このオプションをfind(1)コマンドと組み合わせて使用​​して強力な効果を得ることができます。たとえば、現在のディレクトリとそのサブディレクトリにあるすべてのCソースファイルをアーカイブするには、次の手順を実行します。

find . -name "*.[ch]" -print | zip source -@

これはあなたのニーズに十分ですか?現在のディレクトリに一致するすべてのファイルをアーカイブしたい簡単な場合は、上記のように.*rcこれzip out .*rcを行うだけです。サブフォルダ内のすべてのファイルを再帰的に考慮する必要がある場合は、find上記の順序を調整できます。

find . -name '.*rc' | zip -@ out

答え3

いつでもシェルでワイルドカードを拡張できます。

そしてbash

(
  shopt -s nullglob
  IFS=$'\n'
  set -- $(<files) # split+glob
  (($# == 0)) || printf '%s\n' "$@"
) | zip -@ out

使用zsh(フラグによる重複排除u):

print -rC1 -- ${(u)~${(f)"$(<files)"}/%/(N)} | zip -@ out

ファイル名に改行文字が含まれていないとします。

そしてbsdtar

(
  shopt -s nullglob
  IFS=$'\n'
  set -- $(<files) # split+glob
  (($# == 0)) || printf '%s\0' "$@"
) | bsdtar --null --format zip -T - -cf out.zip

zsh:

print -rNC1 -- ${(u)~${(f)"$(<files)"}/%/(N)} |
  bsdtar --null --format zip -T - -cf out.zip

を使用すると、bsdtarinfozipよりも現代的で便利なアーカイブ形式を使用することもできます。

今回は、ファイル名に改行文字が含まれていると機能します(明らかにパターン自体はそうではありません。各行にfilesエスケープできない改行文字があるため)。

両方のシェルは標準のシェルワイルドカード演算子を拡張します(リストはシェルと各シェルで有効になっているglobオプションによって異なります)。

関連情報