特定のファイルを/home/archive/
の新しいディレクトリにアーカイブするように依頼されました。
私はこのコマンドを使用しました:
mkdir /home/archive
cd /home/archive
tar -cvf log.tar \
/var/log/auth.log /var/log/alternatives/log \
/var/log/bootstrap.log /var/log/cron.log \
/var/log/dpkg.log /var/log/kern.log /var/log/mail.log
コマンドラインが長くなって申し訳ありませんが、必要なのは/ var/logディレクトリ全体のファイルだけです。
私が抱えている問題は、上記のようにlongコマンドを実行すると機能しますが、less log.tar
(まだ抽出せずにコンテンツを表示するため)を実行するとファイルパス全体が表示されることです。
これを表示したい:
alternatives.log
auth.log
bootstrap.log
cron.log
dpkg.log
kern.log
mail.log
代わりに、ファイル名の前に/ var/logパスがあります。これをすべて読むのが混乱している場合は申し訳ありませんが、助けていただければ幸いです。
簡単な解決策は、コマンドを別の方法で実行することです。/var/log内から実行します。
cd /var/log
tar -cvf /home/archive.log.tar \
auth.log alternatives/log bootstrap.log cron.log \
dpkg.log kern.log mail.log
cd /home/archive
私はここに与えられた指示に従います: https://stackoverflow.com/a/18681628/10693721
tar -cjf site1.tar.bz2 -C /var/www/site1
tar -cvf log.tar -C /var/log/auth.log /var/log/alternatives/log /var/log/bootstrap.log /var/log/cron.log /var/log/dpkg.log /var/log/kern.log /var/log/mail.log
tar
は、指定したファイルのパスを記録します。なぜそれが問題なのかよくわかりませんか?
ファイルを表示するときにパスを削除したいだけの場合は、tar tf /home/archive/log.tar | sed 's,.*/,,'
を実行してもファイルは変更されないため、tar tf /home/archive/log.tar
またはless /home/archive/log.tar
を実行している人には引き続きパスが表示されます。
Tarファイルを変更しますか?最初の問題は、tar
ファイルは変更を目的としていないことです。ファイルを変更すると、基本的にファイルのタールが解除され、必要なものが変更され、タールが変更されます。オリジナルからの再梱包は大丈夫だと思います。
2番目の問題は、タイプミスがある可能性があります。コマンドに書き込むときに/ var/log/alternatives/logを実際にタール化しますか、それとも出力に必要に応じて/var/log/alternatives.logをタールしますか? 2番目を想定します。
もしそうなら、
cd /var/log && tar cf /home/archive/log.tar \
auth.log alternatives.log bootstrap.log \
cron.log dpkg.log kern.log mail.log
または
tar cf /home/archive/log.tar \
auth.log alternatives.log bootstrap.log \
cron.log dpkg.log kern.log mail.log \
-C /var/log
うまくやるべきです。
持っているtarファイルを本当に変更したい場合は、/home
に十分なスペースがあることを確認してください(私が行った方法では、さらに2つのファイル用のスペースが必要です)。
cd /home/archive
mv -i log.tar log_with_paths.tar
tar xf log_with_paths.tar
cd var/log
tar cf /home/archive/log.tar *
cd /home/archive
rm -r /home/archive/var
tar tf log.tar
これは、tarファイルリストの出力から相対ファイルパスを取り除くことによる正規表現の演習です。
Tarアーカイブを作成することから始めて、フォルダーへのフルパスをリストします。
tar -cf archive.tar /path1/to/folder1 /path2/to/folder2 /path3/to/folderN
次に、パス出力のみを表示するようにtarに指示します。その出力をstdoutとしてgrepにstdinとしてパイプします。ファイル名のみで最終出力を表示します。
tar -tf archive.tar | grep -o [^/]*$
2つの操作を分離してください。このgrepコマンド:
grep -oP [^/]*$
ファイル名へのパスで行を終了する標準出力またはテキストファイルに適用できます。それだけに制限するのが最善です。 tar -tf archive.tarはファイル名へのパスを出力し、上記のgrepに適した形式です。その出力は次のようになります。
/path/to/folder1/filename1(newline)
/path/to/folder2/filename2(newline)
/path/to/folderN/filenameN(newline)
内訳:[^ /] * $ =行の最後のスラッシュを見つけます。そのポイント以降(スラッシュを除く)から行末まで0文字以上を返します。