ワイルドカードで指定されたファイルのみを圧縮する方法は?

ワイルドカードで指定されたファイルのみを圧縮する方法は?

指定されたファイルだけを圧縮したいです。私は試した:

$ 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

-Ctar(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)

おすすめ記事