我的任务是将某些文件存档到 的新目录中/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)
分解如下:[^/]*$ = 查找行中的最后一个斜杠。从该点开始(不包括斜杠)到行尾返回零个或多个字符。