什么是规范的方式:
scp
一个文件到远程位置tar
或不压缩,单个文件或整个文件夹,7za
或者其他更有效的东西)我熟悉这样的壳管:
tar cf - MyBackups | 7za a -si -mx=9 -ms=on MyBackups.tar.7z
Run Code Online (Sandbox Code Playgroud)
本质上:
tar
stdout
给stdin
压缩程序通过ssh
链接执行此操作的最佳方法是什么,文件登陆远程文件系统?
我宁愿不sshfs
安装。
这行不通:
scp <(tar cvf - MyBackups | 7za a -si -mx=9 -so) localhost:/tmp/tmp.tar.7z
Run Code Online (Sandbox Code Playgroud)
因为:
/dev/fd/63: not a regular file
Run Code Online (Sandbox Code Playgroud) 我正在使用它来安全地创建备份(? - 它真的安全吗?有一个好的密码吗?):
# ENCRYPT
ORIGDIR="DIRECTORYNAMEHERE"; tar cvf - "${ORIGDIR}/" 2>/dev/null | gzip -9 - 2>/dev/null | openssl aes-256-cbc -salt -out "${ORIGDIR}.tar.gz.aes"
# DECRYPT
openssl aes-256-cbc -d -salt -in "ENCDIRECTORYNAMEHERE" | tar -xz -f -
Run Code Online (Sandbox Code Playgroud)
问:但是如何使用具有最大压缩率的 7z 来做到这一点?
除了唯一的 OUTPUT 文件之外创建临时文件并不好,因为如果我需要在 180 GByte FS 上压缩 ~100 GByte 大小的文件/目录,我将没有足够的可用空间(如果例如:压缩文件将需要 ~60字节)。
充其量我想要这样的电话:
$searchtool /path/to/search/ -contained-file-name "*vacation*jpg"
Run Code Online (Sandbox Code Playgroud)
...这样这个工具
*vacation*jpg
)我知道如何使用查找工具、tar、unzip 等。我可以将这些与 shell 脚本结合起来,但我正在寻找一个简单的解决方案,它可能是单行 shell 或专用工具(欢迎提供 GUI 工具的提示,但我的解决方案必须基于命令行)。
由于我的存档需求的特殊性,我对固定的 tar.gz 存档不满意,而是使用 7z。
我使用以下命令来执行此操作:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*
Run Code Online (Sandbox Code Playgroud)
要创造一切内部的档案~/my/folder/
的~/my/folder.7z
文件。
但是~/my/folder/.hiddenFolder
没有进入档案。如何解决这个问题?不*
应该返回所有文件和文件夹吗?
我有一个放在以下目录中的文件:
folder_A/another_folder_A/file_to_add.xml
Run Code Online (Sandbox Code Playgroud)
现在,我想要做的只是将文件添加到现有 zip 存档中的文件夹中。
例如,这是我的 zip 内容:
my_zip.zip/folder_B/another_folder_B
Run Code Online (Sandbox Code Playgroud)
我怎样才能将file_to_add.xml
加到another_folder_B
?
my_zip.zip/folder_B/another_folder_B/file_to_add.xml
Run Code Online (Sandbox Code Playgroud)
我不想创建具有相同名称的文件夹并添加它们。有没有允许我这样做的命令?
做7z x
档案给了我
'20 ª.1 ¯® '$'\302\212''¨à®¢®£à ¤áª ï ã«.rtf' IMG_6527.JPG
''$'\302\212''¨à®¢®£à ¤áª ï, ¨áâ.doc' IMG_6532.JPG
''$'\302\204''®¯ ᮣ« 襨¥(3).doc' IMG_6542.JPG
''$'\302\204\302\212\302\217''.doc' IMG_6543.JPG IMG_6526.JPG
Run Code Online (Sandbox Code Playgroud)
很明显,有些文件的编码方式不同,7z
默认情况下不会转换为 UTF-8。如何告诉7z
做转换?
我为字符集找到的唯一选项:
-scc{UTF-8|WIN|DOS}
:为控制台输入/输出
-scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}}
设置字符集:为列表文件设置字符集
WIN
, DOS
,UTF-8
不工作。当试图通过猜测字符集时
7z -scsCP1251 l 26-08-2016_10-18-14.zip
Run Code Online (Sandbox Code Playgroud)
7z 给出警告:
Unsupported charset: cp1251
Run Code Online (Sandbox Code Playgroud)
unzip
这样做是否正确(西里尔符号已转换):
'20 ?.1 ?? ?????????????? ??.rtf' IMG_6532.JPG '??? ??????????(3).doc'
26-08-2016_10-18-14.zip IMG_6542.JPG '??????????????, ???.doc'
IMG_6526.JPG IMG_6543.JPG
IMG_6527.JPG ???.doc
Run Code Online (Sandbox Code Playgroud)
补充资料
15.14.1 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs AMD Phenom(tm) II X4 960T …
Run Code Online (Sandbox Code Playgroud)我运行 Linux Live CD,我需要从位于磁盘驱动器上的 wim-archive 中提取特定文件。我知道存档中文件的完整路径:
xubuntu@xubuntu:~$ 7z l winRE.wim | grep -i bootrec.exe
2009-08-28 15:02:29 ....A 299008 134388 Windows/System32/BootRec.exe
Run Code Online (Sandbox Code Playgroud)
我的磁盘空间不足,无法解压整个存档。
如何从存档中提取该特定文件?
我尝试了该-i
选项,但这不起作用:
xubuntu@xubuntu:~$ 7z x -i Windows/System32/BootRec.exe winRE.wim
Error:
Incorrect command line
Run Code Online (Sandbox Code Playgroud) 我有一个 .tar.bz2 文件,我想通过 7-zip 命令行工具对其进行解压缩和提取。
所以基本上我正在寻找相当于
tar -xjf foo.tar.bz2
Run Code Online (Sandbox Code Playgroud)
使用 7-zip 时,只有选项 "x" 用于提取,所以这样做
7z x foo.tar.bz2
Run Code Online (Sandbox Code Playgroud)
给我膨胀的 foo.tar 文件,而不是解压 tar 中的所有目录。7z对应的选项是什么?
我有一个test
包含三个文件的目录ls -l test
:
total 8
-rw-r--r-- 1 mb mb 16 Jul 25 11:12 regular_file
-rwxr-xr-x 1 mb mb 19 Jul 25 11:02 script.sh
lrwxrwxrwx 1 mb mb 12 Jul 25 11:14 symlink -> regular_file
Run Code Online (Sandbox Code Playgroud)
它包含一个常规文件、一个符号链接和一个可执行脚本。
使用 归档此目录后tar -czf test.tgz test/
,我想使用 7-Zip 提取三个文件:
7z x -tgzip test.tgz && 7z x -ttar test.tar
Run Code Online (Sandbox Code Playgroud)
不幸的是,7-Zip 不会生成原始文件:该脚本丢失了其可执行位,symlink
不再是符号链接,而是包含文本的文件regular_file
。
total 12
-rw-r--r-- 1 mb mb 16 Jul 25 11:12 regular_file
-rw-r--r-- 1 mb mb 19 Jul …
Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用管道运算符通过 7z 压缩我的 mysqldump 输出(我见过这个问题,但它的答案使用 xz 而不是 7z)。这是我迄今为止尝试过的:
mysqldump -u root -p Linux_Wiki | 7z > backup.sql.7z
Run Code Online (Sandbox Code Playgroud)
和:
mysqldump -u root -p Linux_Wiki | 7za > backup.sql.7z
Run Code Online (Sandbox Code Playgroud)
和:
mysqldump -u root -p Linux_Wiki | '7za a' > backup.sql.7z
Run Code Online (Sandbox Code Playgroud)
和:
mysqldump -u root -p Linux_Wiki | `7za a` > backup.sql.7z
Run Code Online (Sandbox Code Playgroud)
所有四个都失败了,但我确信我已经p7zip
安装了,在最后一次尝试给出了这个输出之后:
Enter password: bash: 7-Zip: command not found
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect
Run Code Online (Sandbox Code Playgroud)