
別のディレクトリにあるファイルを圧縮するために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
ディレクトリを変更すると、拡張*
パラメータが無効になります。tar
zipディレクトリを簡単に知ることができます。
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
//.
これは、パスのどの部分を削除するかを示すために使用されます。