tar unixはディレクトリを変更しません

tar unixはディレクトリを変更しません

別のディレクトリにあるファイルを圧縮するためにtarコマンドを実行しています。

次のコマンドを実行しました。

tar -czf /backupmnt/abc.tar.gz -C /backupmnt/statusService/ *

ディレクトリ内のすべてのファイルを/backupmnt含める必要があるabc.tar.gzファイルを作成したいが、次のエラーが発生します。/backupmnt/statusService/

tar: components: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

componentsコマンドを実行している現在のディレクトリに存在します。以下は内容です/backupmnt/statusService

SS-01:/ # ls /backupmnt/statusService
MJ.netact.xml.tar.gz      gmoTemp_fm.tar.gz  mr.properties.tar.gz  probe.properties.tar.gz  relay_logs.tar.gz  ss_logs.tar.gz  tomcat_conf.tar.gz
esymac_config.txt.tar.gz  gmoTemp_pm.tar.gz  o2ml.tar.gz           probes_logs.tar.gz       ss_conf.tar.gz     ss_pm.tar.gz    tomcat_logs.tar.gz

私はどこで間違っているのか理解できません。

答え1

*tar実行前のシェルによって拡張されます。したがって、tarディレクトリを変更すると、拡張*パラメータが無効になります。tarzipディレクトリを簡単に知ることができます。

tar -czf /backupmnt/abc.tar.gz -C /backupmnt/statusService/ .

ディレクトリが変更されたときに変更される.現在のディレクトリを示します。tarこれにより、隠しファイル(で始まるファイル.)がアーカイブに含まれます。

答え2

明示的なディレクトリ変更を使用しないのはなぜですか?

cd /backupmnt/statusService && tar -czf /backupmnt/abc.tar.gz *

または、相対パスを使用することもできます。

cd /
tar -czf /backupmnt/abc.tar.gz backupmnt/statusService1/* backupmnt/statusService2/* backupmnt/statusService3/*

フォルダ内のファイルを分離し、重複したファイル名を上書きするのを防ぐことができるので、これはより良い解決策かもしれません。

答え3

-Cどんな手段でもポータブルオプションではありません。これはUNIXオプションではなくGNUオプションです。

tarそれにもかかわらず、実装は非常に多様であるため、単一のUNIX仕様は指定されなくなりました。paxアーカイブを作成するには移植可能でなければなりません。

次のことができます。

pax -ws '|.*//||' /backupmnt/statusService//. /some/other/dir//./*.ext |
  xz > file.tar.xz

(POSIXは/を指定しませんxz)。gzip

//.これは、パスのどの部分を削除するかを示すために使用されます。

関連情報