由于我的归档需求的具体情况,我对固定的 tar.gz 归档感到不舒服,因此改用 7z。
我使用以下命令来执行此操作:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*
~/my/folder/
将其中的所有内容创建为文件存档~/my/folder.7z
。
但~/my/folder/.hiddenFolder
那时不会进入档案。如何解决这个问题?不是*
应该返回所有文件和文件夹吗?
答案1
长话短说
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/.
更多示例
目录结构示例
test1
├── .hidden
└── normal.txt
0 directories, 2 files
尝试以下命令
根文件夹及其所有内容。
7za a test1_a.7z ~/test1/
给出
Date Time Attr Size Compressed Name ------------------- ----- ------------ ------------ ------------------------ 2017-08-06 09:23:51 D.... 0 0 test1 2017-08-06 09:23:44 ....A 0 0 test1/.hidden 2017-08-06 09:23:51 ....A 0 0 test1/normal.txt ------------------- ----- ------------ ------------ ------------------------ 2017-08-06 09:23:51 0 0 2 files, 1 folders
没有根文件夹,也没有隐藏文件
7za a test1_b.7z ~/test1/*
给出
Date Time Attr Size Compressed Name ------------------- ----- ------------ ------------ ------------------------ 2017-08-06 09:23:51 ....A 0 0 normal.txt ------------------- ----- ------------ ------------ ------------------------ 2017-08-06 09:23:51 0 0 1 files
没有根文件夹,但包含隐藏文件(这是我们通常想要的)
7za a test1_c.7z ~/test1/.
给出
Date Time Attr Size Compressed Name ------------------- ----- ------------ ------------ ------------------------ 2017-08-06 09:23:44 ....A 0 0 .hidden 2017-08-06 09:23:51 ....A 0 0 normal.txt ------------------- ----- ------------ ------------ ------------------------ 2017-08-06 09:23:51 0 0 2 files
答案2
如果您想要单个目录的内容,一个简单的方法是先更改为它:
cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .
您看到的是*
扩展为不以.
.这是记录的行为,也是名称以 a 开头的文件被称为隐藏的主要原因.
(另一个是ls
默认情况下不显示它们)。
没有真正方便的可移植方法来列出目录中的所有文件。您可以使用
~/my/folder/..?* ~/my/folder/.[!.]* ~/my/folder/*
但如果没有与其中一种模式匹配的文件,则该模式将保持未展开状态。在 bash 中,您可以设置dotglob
选项以避免特殊处理前导.
(.
并且..
仍然被排除在匹配之外):
shopt -s dotglob
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*
在 ksh 中,或者在 bash 中(如果设置了该extglob
选项)(或者在 zsh 中,如果设置了该ksh_glob
选项),您可以编写一个匹配除.
和之外的所有文件的模式..
:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/@(..?*|.[!.]*|*)
在 zsh 中,有一种更简单的方式来表示.
不得在模式中进行特殊处理:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*(D)
答案3
不,*
不应该返回所有文件。它仅返回可见的。
更简单的解决方案是:
cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .
答案4
我使用 7z(在 Linux 中)提取了我的 zip 存档,我有一个充满 zip 的文件夹。
我用过了:
7z x *.zip -o* to extract the zip files
我需要弄清楚: 7z a {上述命令中的文件夹} -r
记住上述内容,我想使用 7z a 命令创建 7z 存档,但使用在提取部分中创建的文件夹名称。那怎么办呢?