我不知道我是怎么做到的。我必须擦除我的专用服务器并重新启动,所以我首先将所有内容备份到远程 VPS;在此过程中,我将一个充满其他文件夹的文件夹压缩为foldername.gz,而不是使用tar,因此当我现在提取它时,它会提取为单个文件,而不是一个充满文件夹的文件夹。我尝试重命名为foldername.tar.gz,但提取时给出:
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)
当我使用它时file foldername.gz,它给了我:
foldername.gz: gzip compressed data, was "2a863233-fac4-4611-8bbd-76416e58e5d4.dat", last modified: Thu Dec 9 10:36:04 2021, from Unix, original size modulo 2^32 2629632
编辑,这给出了file -z foldername.gz:
foldername.gz: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT) (gzip compressed data, was "2a863233-fac4-4611-8bbd-76416e58e5d4.dat", last modified: Thu Dec 9 10:36:04 2021, from Unix)
在查看一些文件系统以了解哪些文件系统消耗了磁盘空间时,我发现了一个名为GNUSparseFile.0. 我无法轻易查明其内容是否被使用。它可能是解压后暂时剩下的东西吗?操作系统是 FreeBSD,因此可能已使用 BSD 解压tar。
我正在尝试使用tar -xvf格式(其中 * 是任何单词字符)*@*@*@*.tar.gz提取 tarball ,但我认为 tar 正在尝试在远程位置找到该文件。我得到的错误是命令tar -xzvf tasf423@2012-02-22\@00:03:04\@ja41nf.tar.gz:
tar (child): Cannot connect to 2012-02-22@00: resolve failed
Run Code Online (Sandbox Code Playgroud)
我尝试使用反斜杠来转义它,甚至尝试用 %40 替换 @ 符号,但这些似乎都不起作用。有没有办法使用名称中带有 @ 的 tar 命令来提取 tarball?
我正在尝试使用命令替换制作 tar.tgz 文件
有 2012 年 8 月 17 日的备份
-rw-r----- 1 ossec 502 804M Aug 17 2012 BKPMDISINT_i6nir20j.F_bkp
-rw-r----- 1 ossec 502 2.7G Aug 17 2012 BKPSYFINT_i5nir20j.F_bkp
-rw-r----- 1 ossec 502 3.9G Aug 17 2012 BKPMSFFINT_i4nir20j.F_bkp
-rw-r----- 1 ossec 502 28M Aug 17 2012 c-651746692-20120817-00
-rw-r----- 1 ossec 502 2.0G Aug 17 2012 ALG_KLPFINT_ianir576.alg
-rw-r----- 1 ossec 502 1.5G Aug 17 2012 ALG_KLPFINT_i8nir576.alg
-rw-r----- 1 ossec 502 37M Aug 17 2012 ALG_KLPINT_ibnir64h.alg
-rw-r----- 1 ossec 502 2.2G Aug 17 …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取 tar 文件夹中所有文件的列表,将它们全部显示在带有下载文件链接的页面上。单击单个文件,它将被下载。除了硬链接文件外,一切正常
我用来提取单个文件的命令是
tar --extract --file=abc.tar.xz abc.file
Run Code Online (Sandbox Code Playgroud)
但是如果文件是硬链接,那么它会给我错误,有没有办法获得硬链接文件?
我有一种情况,我想从嵌套的 tar.gz 中提取文件。.tar.gz 的结构如下
我只想从test.tar.gz文件中提取test.log文件。我看过这篇文章,我们可以用它提取 tar.gz 文件,但不能在嵌套级别中提取。
我正在添加 tar tfz data1.tar.gz 的输出 文件夹结构可能与手动输入上述结构略有不同。
data1/.
data1/META.json
data1/TEMP
data1/TEMP/temp-2
data1/TEMP/temp-2/1-chksum.txt
data1/TEMP/temp-2/1
data1/TEMP/temp-2/1/otherfiles
data1/TEMP/temp-2/1/otherfiles/2016_06_24.tar.gz
Run Code Online (Sandbox Code Playgroud)
因此test.log文件存在于2016_06_24.tar.gz内的嵌套文件夹中
我正在考虑如何将 .tar.gz HOME 备份安全地恢复到几乎一个新的 Debian 系统中(某些文件可以存在,因此应该保留rsync -u)。我的主 PC 坏了,所以我必须使用备份 Debian 系统,但我需要主系统的 HOME 备份(仅以下主文件)。系统特点
$HOME 是 /home/masi/#1. [但使用圆形符号链接失败]
# http://unix.stackexchange.com/a/291720/16920
nice tar czf /media/masi/ext4Masi/backup_home_20.12.2016.tar.gz $HOME/
Run Code Online (Sandbox Code Playgroud)
我的目录中有符号链接。我注意到 tarball 不包含所有目录,例如$HOME/Documents/和/或/home/masi/Documents/. 该目录有许多符号链接,可能还有一些圆形符号链接。然后 tarball 再次包含$HOME/Desktop/并且$HOME/Downloads不应包含任何循环符号链接,并且Downloads目录根本没有符号链接。
#2. [被拒绝,因为会导致大量重复文件]
tar czf --dereference \
/media/masi/ext4Masi/backup_home_20.12.2016.tar.gz $HOME/
Run Code Online (Sandbox Code Playgroud)
#3. ...
tar xzfC ...]我认为rsync这里没有删除是正确的选择,但可以-u选择跳过目标文件已经存在并且日期晚于源文件的任何文件
(要求几乎);
伪代码,因为我认为.tar.gz不能在那里输入
# http://unix.stackexchange.com/a/287016/16920
rsync -rtvuc --progress …Run Code Online (Sandbox Code Playgroud) 以下命令如何工作?
pv file.tar.gz | tar -xz
Run Code Online (Sandbox Code Playgroud)
根据我的理解,管道运算符|创建 apipe和stdoutofpv映射到O_WRONLY管道的末尾,tar'sstdin映射到O_RDONLYwith bothO_WRONLY和O_RDONLYexisting inpipefs
这一切都很好,但以下内容正在打印到我的屏幕上:
31.1MiB 0:00:05 [6.17MiB/s] [===================================>] 100%
Run Code Online (Sandbox Code Playgroud)
据我所知,这个进度条不是由生成的,tar因为如果它是并且我不需要它,它可以通过一个选项获得pv,因此pv必须生成它。但是如何? pv的stdout映射到O_WRONLY.
我还读到一些 shell 使用套接字对代替管道,pipefs并且套接字对是双向的。但这似乎会占用stdin和stdout两个命令,直到一个或两个命令完成。在上面的例子中不是这种情况,因为进度条是实时更新的。
假设我有archive.zip一个名为的目录myDir(它实际上是其中唯一的目录),并且该目录包含一个名为x.
unzip archive.zip -d ~/ 带来:
~/myDir/x
Run Code Online (Sandbox Code Playgroud)
mv ~/myDir ~/myRenamedDir,带来:
~/myRenamedDir/x
Run Code Online (Sandbox Code Playgroud)
有没有办法myDir用提取重命名 my ,所以结果将是~/myRenamedDir/x,直接,不需要mv?