如何从我已存档的文件中删除路径名.. UBUNTU

如何从我已存档的文件中删除路径名.. UBUNTU

我的任务是将某些文件存档到 的新目录中/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 目录中的那些文件。

我遇到的问题是,当我执行如上所述的长命令时,它可以工作,但它会显示整个文件路径less log.tar(无需提取即可查看内容)。

我希望它显示这个:

alternatives.log 
auth.log 
bootstrap.log 
cron.log 
dpkg.log 
kern.log 
mail.log 

相反,文件名前面有 /var/log 路径。如果读到这里让你感到困惑,我很抱歉,但我非常感谢你的帮助!

答案1

快速解决方案是以不同的方式运行命令。从 /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

答案2

我将遵循此处给出的说明: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

答案3

tar将记录您指定的文件路径。我不太清楚为什么这是个问题?

如果您只是希望在显示文件时删除路径,您可以执行,tar tf /home/archive/log.tar | sed 's,.*/,,'这不会更改文件,因此执行此操作的人tar tf /home/archive/log.tar仍然less /home/archive/log.tar会看到路径。

您想修改 tar 文件吗?第一个问题,tar文件不是用来修改的,修改文件本质上就是解压它,更改您想要的内容,然后重新打包。我认为从原始文件重新打包就可以了。

第二个问题,你可能打错了。你真的按照命令中写的那样对 /var/log/alternatives/log 进行 tarring 吗?还是按照你想要的输出对 /var/log/alternatives.log 进行 tarring ?我假设是第二种。

如果是这样,

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(按照我的做法,你需要足够的空间来存放另外两个文件),然后执行

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

答案4

这是正则表达式的练习,通过从 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 [^/]*$

将两个操作分开。此 grep 命令:

grep -oP [^/]*$

可以应用于任何以文件名路径结尾的 stdout 或文本文件。最好将其限制为仅此而已。tar -tf archive.tar 输出文件名路径,非常适合上述 grep 的格式。其输出如下所示:

/path/to/folder1/filename1(newline)
/path/to/folder2/filename2(newline)
/path/to/folderN/filenameN(newline)

分解如下:[^/]*$ = 查找行中的最后一个斜杠。从该点开始(不包括斜杠)到行尾返回零个或多个字符。

相关内容