指定されたファイルだけを圧縮したいです。私は試した:
$ ls $des/bin
a.c analysis.hpp classify.hpp main.cpp split.hpp
a.cpp a.out grade.cpp main.out student.cpp
analysis.cpp classify.cpp grade.hpp split.cpp student.hpp
$ cd /
$ tar czf ~/files.tgz -C $des/bin '*.cpp' '*.hpp'
与える
tar: *.cpp: Cannot stat: No such file or directory
tar: *.hpp: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
一つも--wildcards
役に立たない
$ tar czf ~/files.tgz -C $des/bin --wildcards '*.{c,h}pp'
tar: *.{c,h}pp: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
-C
tar(via)で変更されたディレクトリでワイルドカードを使用する方法は?
ベストアンサー1
glob はシェルによって拡張されます。ワイルドカードはtar
(少なくとも一部のtar
実装では)サポートされていますが、アーカイブから抽出または一覧表示するファイルをフィルタリングする場合にのみ使用されます。
したがって、ファイルリストはシェルで作成する必要があり、アーカイブに保存する必要があるファイル名にディレクトリ部分が含まれていない場合は、そのディレクトリ部分を削除するかtar
(一部-s
または--transform
オプションがあります)、cd
単にファイルリストを作成する前にディレクトリです。
出力アーカイブを元の作業ディレクトリに保持するには、次のようにリダイレクトを使用し、サブシェルでのみディレクトリを変更できます。
(cd -P -- "$des/bin" && tar -zcvf - -- *.[hc]pp) > files.tar.gz
または、変更する前に現在の作業ディレクトリを記録できます。
(dir=$PWD; cd -P -- "$des/bin" && tar -zcvf "$dir/files.tar.fz" -- *.[hc]pp)