現在、次のようにログファイルのコピーを作成します。
# tar -cvzf /var/www/vhosts/example.com/httpdocs/myfiles.tar.gz
/var/www/vhosts/example.com/logs/access_log
/var/www/vhosts/example.com/httpdocs/app/tmp/logs/error.log
/var/log/mysqld.log
/var/log/messages
/var/log/httpd/access_log
/var/log/httpd/suexec_log
/var/log/httpd/error_log
/var/log/sw-cp-server/error_log
/usr/local/psa/var/log/xferlog
/etc/php.ini
ただし、これによりディレクトリ構造のtarファイルが作成されます。フォルダ構造を回避するには、cd
すべてのファイルがサブフォルダなしでtarファイルとして保存されるように、ファイルごとにファイルを作成する必要があるようです。 (tar.gzファイルにも問題がありますが、tarコマンドはファイルが圧縮されている場合はアーカイブファイルの更新を許可しません。)
ただし、この場合、同じ名前のファイルが複数存在します(例:access_logという2つのファイル)。
したがって、ターゲットログファイルの名前を変更する必要があります。
例えば
/var/www/vhosts/example.com/logs/access_log to -var-www-vhosts-example.com-logs-access_log
/var/log/httpd/access_log to -var-log-httpd-access_log
ディレクトリ構造とファイル名を変更せずにこれらのファイルをアーカイブできますか?ファイルは別のフォルダに存在します。
答え1
GNU tar support--transform=expression
あなたの場合はそうです--transform s,/,-,
(リーディングがなければ-
大丈夫です)。
答え2
@Marksの返信に追加
-T
コマンドとスイッチを使用して--transform
これを行うことができますtar
。
私のディレクトリ構造は次のとおりです。
|-- foo1
| |-- file1.txt
| |-- file2.txt
| `-- file3.txt
|-- foo2
| |-- file4.txt
| |-- file5.txt
| `-- file6.txt
|-- foo3
| |-- file7.txt
| |-- file8.txt
| `-- file9.txt
`-- foo4
|-- file10.txt
|-- file11.txt
`-- file12.txt
ディレクトリ名を含むファイルを圧縮できます。
$ find -type f | tar --transform="s,/,-,2" -czvf compress.tgz -T -
ディレクトリ名は含まれません。
$ find -type f | tar --transform="s,.*/,," -czvf compress.tgz -T -