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
を使用すると、bsdtar
infozipよりも現代的で便利なアーカイブ形式を使用することもできます。
今回は、ファイル名に改行文字が含まれていると機能します(明らかにパターン自体はそうではありません。各行にfiles
エスケープできない改行文字があるため)。
両方のシェルは標準のシェルワイルドカード演算子を拡張します(リストはシェルと各シェルで有効になっているglobオプションによって異なります)。