WinRAR命令行模式解压缩文件

其实我比较懒,但是,每隔一段时间就会有客户的网站被挂马攻击让我帮忙处理,说实在,现在这个样子很令人讨厌的,一个改一个删,重复……

之前linux环境帮客户写一个脚本解决了,轻松大半年。

现在window环境的客户也来了,写脚本,大家都知道,window的脚本环境有很多的啦,本来计划用VBS来写的,但是,你知道的,我懒。

所以,想想有什么简单的办法呢?

然后我就想起,不就每次都修改那几个文件嘛,我每次怎么处理的?不就是将备份里面的文件解压出来复制进来吗,能自动完成?

好吧,这就到我们的WinRAR命令行模式出马了。

新建一个文件auturar.cmd吧,然后里面的代码如下:

“C:\Program Files\WinRAR\Rar.exe” e -o+ D:\xm\backup.rar D:\xm\

第一个是WinRAR安装路径;

第二个e是解压缩;

第三个-o+表示覆盖存在文件;

第四个是压缩包的路径,请使用绝对值,除非你用cd进入需要解压的目录;

第五个是存放解压缩文件的路径;

然后做一个任务计划(开始、全部程序、附件、系统工具、任务计划),设定刚才新建的文件,然后就可以按照设定自动跑了。

附录:WinRAR的其他命令

备注:
可以从安装目录里面找到Rar.txt文件或者输入rar不带有参数,会自动显示用法。

用户手册
~~~~~~~~
RAR 4.20 控制台版本
~~~~~~~~~~~~~~~~~~~

=-=-=-=-=-=-=-=-=-=-=-=-=-=-
欢迎使用 RAR 压缩文件管理器!
-=-=-=-=-=-=-=-=-=-=-=-=-=-=

简介
~~~~

RAR 是一个强力压缩工具,允许你管理和操作压缩文件。控制台 RAR 只支持 RAR
格式,带有的 “.rar” 扩展名的文件。ZIP 和其他格式不被支持。Windows 用户可以
安装图形界面 RAR 版本 – WinRAR,它可以处理更多的压缩文件类型。

虽然控制台 RAR 和图形界面 WinRAR 有相似的命令行语法,但是它们还有有一些
不同。所以推荐使用此 rar.txt 手册用于控制台 RAR(rar.exe 在 Windows 版本的情
况下),winrar.chm 是图形界面 WinRAR(winrar.exe) 的帮助文件。

RAR 的功能包括:

* 高度成熟的原创压缩算法
* 对于文本、声音、图像和 32 位和 64 位 Intel 可执行程序压缩的特殊优化算法
* 获得比类似工具更好的压缩率,使用’固实’压缩
* 身份校验(只有注册版本可用)
* 自解压压缩文件和分卷压缩(SFX)
* 对物理损伤的压缩文件的恢复能力
* 锁定,密码,文件顺序列表,文件安全和更多……

配置文件
~~~~~~~~

Unix 版本的 RAR 从用户的 home 或 /etc 目录中的 .rarrc 文件读取配置文件信息
(存储在 HOME 环境变量中)

Windows 的版本 RAR 从 rar.ini 文件读取配置文件信息,它放在 rar.exe 文件相
同的目录中。

这个文件包含下列字符串:

switches=任何 RAR 开关,用空格分开

例如:

switches=-m5 -s

环境变量
~~~~~~~~

可以通过建立”RAR”环境变量来添加默认参数到命令行中.

例如,在 Unix 中,下列命令行可以被添加到你的配置中:

RAR=’-s -md1024′
export RAR

RAR 将使用这个字符串作为命令行的默认参数,并将使用 1024KB 字典大小来创建
“固实”压缩文件。

RAR 控制选项使用下列优先级:

命名行开关 最高优先级
在 RAR 变量中的开关 低优先级
保存在配置文件中的开关 最低优先级

日志文件
~~~~~~~~

如果在命令行或配置文件中指定开关 -ilog ,RAR 将会把处理压缩文件中遇到的错误
等写到日志文件中。读取开关 -ilog 描述获得更多信息。

固实压缩的文件列表 – rarfiles.lst
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

rarfiles.lst 包含一个用户定义的文件列表,告诉 RAR 添加文件到固实压缩文件时的顺
序。它可以包含文件名通配符和指定项目 -$default。默认项目定义了这个文件中与
其他项目不相符时的顺序清单位置。 注释字符是 ‘;’.

在 Windows 中,这个文件应该放在 RAR 所在的或 %APPDATA%\WinRAR 目录中,
在 Unix 中- 放在用户的 home 目录或在 /etc 中。

提高压缩率和操作速度的提示:

– 在压缩文件中,小文件应该被组织在一起;
– 频繁被处理的文件应该放在开始的位置。

普通的掩码越靠近顶端优先权就越高,但是这个规则存在例外。如果 rarfiles.lst
包含两个掩码,并且所有文件既匹配第一个掩码,也匹配第二个掩码, 较小的子集
或者更精确的匹配拥有更高的优先权。例如,如果你用 *.cpp 和 f*.cpp 掩码,
f*.cpp 拥有更高的优先权。

RAR 命令行语法
~~~~~~~~~~~~~~

语法

RAR <命令> [ -<开关> ] <压缩文件> [ <@列表文件…> ]
[ <文件…> ] [ <解压路径\> ]

描述

命令行选项 (命令和开关) 提供了使用 RAR 创建和管理压缩文件的控制方法。命
令是一个字符串(或单个的字母),命令 RAR 去执行一个相应的操作。开关被用来
改变 RAR 执行操作的方法。其它参数是压缩文件名和被压缩的文件或要从压缩文件
中被解压文件。

列表文件是一个包括处理的文件名的纯文本文件。第一列应该以文件名开始。可以
在//字符后添加注释。例如,你可以创建包含下列字符串的 backup.lst:

c:\work\doc\*.txt //备份文本文档
c:\work\image\*.bmp //备份图片
c:\work\misc

接着运行:

rar a backup @backup.lst

如果你希望从标准输入设备读取文件名,指定空的文件列表名(只有@)。

默认, 在列表文件中 Windows 控制台 RAR 使用 OEM (DOS) 编码。但是可以使用
-sc<字符集>l 开关重定义。

你可以在同一命令行指定普通文件名和列表文件。如果文件和列表
文件都未被指定,那么 RAR 将默认是 *.*,来处理所有文件。

许多 RAR 命令,例如解压、测试和列表,都允许在压缩文件名中使用通配符。如
在压缩文件名掩码中没有指定扩展名,RAR 会认为是 .rar,所以 * 意味着所有
.rar 扩展名的压缩文件。如果你需要处理所有没有扩展名的压缩文件,请使用
*. 掩码。*.* 掩码选择所有文件。在压缩和删除时,压缩文件名中不允许有通配
符。

在 Unix 中,你需要将 RAR 命令行参数置于单引号或双引号中,防止被 Shell
解释。例如,这个命令将从当前目录中所有的 RAR 压缩文件中解压的 *.asm 文件:

rar e ‘*.rar’ ‘*.asm’

命令可以是下列中的任何一个:

a 添加文件到压缩文件中。

例子:

1) 从当前目录添加所有的 *.hlp 文件到 help.rar 压缩文件:

rar a help *.hlp

2) 把当前目录和子目录的所有文件压缩为 362000 字节大小、固实的、
自解压分卷压缩文件并对没个卷添加恢复记录:

rar a -r -v362 -s -sfx -rr save

因为尾指定文件名,假设为所有文件 (*)。

3) 作为一个特别的例外,如果目录名被作为参数指定并且目录名不包
含文件掩码和以反斜线结尾,即使没有指定 -r 开关,目录和子目录的
所有内容都会被添加到压缩文件中。

下面的命令会把 Bitmaps 目录和它的子目录中的所有文件添加到 RAR
压缩文件 Pictures.rar 中:

rar a Pictures.rar Bitmaps

4) 如果目录包含文件掩码或以反斜线结尾,将会应用普通的规则,你
需要指定 -r 开关来处理它的子目录。

下列命令会把 Bitmaps 目录中除了子目录外的所有文件添加,因为未
指定开关 -r:

rar a Pictures.rar Bitmaps\*

c 添加压缩文件注释。当压缩文件被处理时注释被显示。文件的注释长度限
制到 32767 字节

例子:

rar c distrib.rar

注释也可以使用 -z[名称] 开关从文件添加:
下列命令从 info.txt 文件添加一个注释:

rar c -zinfo.txt dummy

cf 添加文件注释。当使用’v’命令时显示文件注释。文件的注释长度限制到
32767 字节。

例子:

rar cf bigarch *.txt

ch 改变压缩文件参数。

此命令能和大多数压缩文件变量开关一起使用修改压缩文件参数。对于象
-av, -cl, -cu, -tl 等没有专门命令的开关特别方便。

它不能重新压缩、解密或加密压缩文件数据,它不能整合或创建卷。如果
不和其它开关一起使用,’ch’ 命令仅复制压缩文件数据而不修改它。

例如:

设置压缩文件时间为最新的文件:

rar ch -tl files.rar

cw 写压缩文件注释到指定文件。

输出文件格式依赖于 -sc 开关。

如果输出文件名没有指定,注释数据会被发送到标准输出设备。

例子:

1) rar cw oldarch comment.txt

2) rar cw -scuc arc unicode.txt

3) rar cw arc

d 从压缩文件中删除文件。请注意,如果这个命令导致压缩文件中所有文件
全部删除,这个空的压缩文件将被删除。

e 解压文件到当前目录。

f 更新压缩文件中的文件。 更新打包到压缩文件后被改变的文件。这个命令不
向压缩文件中添加新文件。

i[i|c|h|t]=<字符串>
在压缩文件中查找字符串。

支持下列可选参数:

i – 不区分大小写(默认);

c – 区分大小写搜索;

h – 十六进制搜索;

t – 使用 ANSI, Unicode 和 OEM 字符表 (只有 Windows 可用);

如果没有指定任何参数,它可以使用简化的命令行语法 i<字符串> 来代
替 i=<字符串>

它允许指定带有另外一个参数的 ‘t’ 变量,例如,ict=字符串 在上面提
及的所有表中执行区分大小写的搜索。

例子:

1) rar “ic=first level” -r c:\*.rar *.txt

在 c:\*.rar 压缩文件中的 *.txt 文件执行区分大小写的 “first level”
字符串的搜索

2) rar ih=f0e0aeaeab2d83e3a9 -r e:\text

在 e:\text 目录下的 rar 压缩文件中搜索十六进制字符串
f0 e0 ae ae ab 2d 83 e3 a9。

k 锁定压缩文件。任何试图改变压缩文件的命令都会被忽略。

例子:

rar k final.rar

l[t,b] 压缩文件的内容列表[技术信息]。和 ‘v’ 命令一样列出文件,但不包括
文件路径。也就是只显示文件名。当使用’t’变量时可选技术信息(主操作
系统,固实标志和老版本标记)被显示。变量 ‘b’ 强制 RAR 只输出单纯
的文件名,而没有其他任何的附加信息。

m[f] 移动到压缩文件中[只用于文件]。移动文件和目录会使压缩操作完成后它
们被删除。如果使用变量’f’和/或应用开关’-ed’,则不删除目录。

p 打印文件到标准输出设备。

你可以把这个命令和 -inul 开关一起使用来禁止所有的 RAR 信息,并只
打印文件数据。当你需要发送一个文件到标准输出设备时,这也许很重要。

r 修复压缩文件。压缩文件修复是在两阶段中完成的。首先,在损坏的压缩
文件中查找恢复记录(参照’rr’命令)。如果压缩文件包含恢复记录,并且
损坏数据部分是连续的,而且少于N*512字节(N 处是放入压缩文件恢复块
的数字),则成功恢复压缩文件的机会非常高。当这个阶段完成,一个新的
压缩文件将被创建,名为_RECOVER.RAR。

如果损坏的压缩文件不包含恢复记录或如果压缩文件没有完全恢复导致大
的损伤,将执行第二阶段。这一阶段期间只重建压缩文件的结构,而不可
能恢复 CRC 校验失败的文件。它仍然可能恢复未受损的文件,因文件结
构破坏。这对于非固实压缩文件通常有用。此阶段不会影响加密文件头的
压缩文件,这样的文件只有在存在恢复记录时才能被修复。

当第二阶段完成,重建结构的压缩文件将被保存为 rebuilt.arcname.rar,
‘arcname’ 的位置是原始压缩文件名。

在恢复记录进行中,当发现可疑文件时,RAR 可以提示用户。

可疑项目

名字: <可能的文件名>
大小: <大小> 压缩后: <压缩后大小>

添加它: 是/否/全部

回答 ‘y’ 把这个项目添加到文件 rebuilt.arcname.rar 中。

例子:

rar r buggy.rar

rc 使用恢复卷(.rev 文件)重建丢失的卷。你需要指定任何已存在的卷作为
压缩文件名,例如,’rar rc backup.part03.rar’

读取 ‘rv’ 命令描述得到关于恢复卷的信息。

rn 重命名压缩文件。

命令语法是:

rar rn <压缩文件名> <源文件名1> <目标文件名1> … <源文件名N> <目
标文件名N>

例如,下列命令:

rar rn data.rar readme.txt readme.bak info.txt info.bak

在压缩文件 data.rar 中将把 readme.txt 重命名为 readme.bak 并把
info.txt 重命名为 info.bak。

在源文件和目标文件名中可以使用通配符来进行简单像改变文件扩展名
的名称转换。例如:

rar rn data.rar *.txt *.bak

将把所有的 *.txt 文件重命名为 *.bak。

RAR 不检查目标文件名是否已经在压缩文件中存在,所以你需要小心,
防止重名。尤其是使用通配符时特别重要。这个命令有潜在的危险,
因为一个错误的通配符可以损坏所有的压缩文件名。

rr[N] 添加数据恢复记录。可选,多余信息(恢复记录)可以被添加到压缩文件
中。这将导致压缩文件大小稍微增加,但能在磁盘错误或其它数据损害
不是很严重情况下帮助恢复压缩文件。一个恢复记录最大包含 524288
个恢复块。块的数目可以在’rr'(N = 1,2 .. 524288)命令中直接指定
或不用用户指定,而是根据压缩文件的大小自动设定:一个恢复信息大
小大约是总压缩文件大小的1%,通常允许恢复达到压缩文件总大小的
0.6%的连续数据。

也可以以压缩文件大小的百分比来指定恢复记录的大小。只要把%添加到
命令参数后。 例如:

rar rr3% arcname

注意,如果你从.bat 或 .cmd文件运行这个命令时,你需要使用rr3%%代
替rr3%,因为批处理命令把符号’%’作为批处理文件开始的参数。你可以
使用 ‘p’ 代替’%’,所以’rr3p’也可运行。

如果受损的数据是连续性的,则每个恢复记录块帮助恢复损坏信息的512
字节。如果多处损坏这个值将降低。

恢复记录的大小可以使用公式<压缩文件大小>/256 + <恢复记录数>*512
字节估计。

rv[N] 创建恢复卷(.rev文件),以后它可以用于重建卷组中丢失的文件。这个命
令只对多卷压缩文件敏感,你需要在组中指定第一个分卷文件的文件名。
例如:

rar rv3 data.part01.rar

这个功能可以被用来备份,例如,发送一个多卷压缩文件到一个新组,并
且部分接收者没有收其中的一些文件。重新发送恢复卷代替普通卷,可以
减少传送文件的总数。

每个恢复卷可以重建一个丢失的 RAR 卷。例如,如果你有30个卷,3个恢
复卷,你可以创建任何3个丢失的卷。如果.rev文件的数目少于丢失卷的
数目,重建将不可能。普通和恢复卷的总数不能超过255。

原来的 RAR 卷在卷被创建后不能被修改。修复算法使用存储在 REV 文件
和 RAR 卷中的数据来重建丢失的 RAR 卷。所有如果你修改了 RAR 卷,
例如,在创建 REV 文件后锁定它们,修复操作将失败。

选项 <N> 参数指定创建恢复卷的数目,必须少于RAR卷的总数。你也可以
附加一个百分号到这个参数上,这样创建的.rev文件的数目将等于从 RAR
卷总数获得的这个百分比。 例如:

rar rv15% data.part01.rar

RAR 不管是使用‘rc’命令或自动时,如果在解压时无法定位下一卷,并
且发现可用数目的 .rev 文件,对丢失的卷和损坏的卷都试图重建。

损坏卷的原始副本在被重建前重命名为 *.bad。例如,volname.part03.rar
将被重命名为volname.part03.rar.bad。

s[名称] 转换压缩文件成自解压格式。压缩文件和自解压模块合并(使用
default.sfx模块或在开关中指定)。在 Windows 版本中 default.sfx 应
该放在RAR.exe 所在目录下,在 Unix 中在用户的 home 目录中,在
/usr/lib 或 /usr/local/lib 下。

s- 从已存在的自解压压缩文件中删除自解压模块。RAR 创建一个不带自解压
模块的新的压缩文件,原来的自解压文件不会被删除。

t 测试压缩文件。为了验证指定的文件,这个命令执行虚拟的文件解压操作,
不写出任何输出数据流。

例子:

在当前目录测试压缩文件:

或对于 Unix:

rar t ‘*’

当前目录开始,测试所有子目录下的压缩包:

rar t -r *

或对于 Unix:

rar t -r ‘*’

u 更新压缩文件中的文件。添加不在压缩文件中的文件和更新打包后改变了的
文件。

v[t,b] 详细列出压缩文件内容[技术信息]。文件列出所使用的格式:绝对路径名,文
件注释,原始和压缩后的大小,压缩率,最近更新日期和时间,属性,CRC,
压缩方式和解压所需的最小 RAR 版本。

压缩模式信息被显示为 m<N><d>。N 使用和 -m<n> 开关一样的值显示压缩模
式,’0′, ‘1’, …, ‘5’ 意味着 ‘存储’, ‘最快’, …, ‘最好’。’d’ 表示
压缩字典,和 -md<n> 开关中一样,’a’, ‘b’, …, ‘g’ 意味着 64 KB,
128 KB, …, 4096 KB。目录始终为 ‘0’ 压缩方法并且没有字典大小。

当使用’t’变量时显示可选技术信息,如主操作系统,固实标志和显示“旧”
标记。“主操作系统”用于创建压缩文件的 RAR 的操作系统。如果多个文件
使用统一的压缩统计时设置“固实”标记(查看 -s 开关)。“旧”标记意味着
“旧的文件版本”并指出它是最新的或就的文件版本。 (查看 -ver 开关获得
更详细信息)。

变量 ‘b’ 强制 RAR 只输出单纯的文件名,而没有其他任何的附加信息。

列出所有压缩卷的内容,使用星号(‘*’)代替压缩文件扩展名或使用’-v’
开关。

例子:

1) 列出 system.rar 压缩文件的内容 (技术信息)并使用重定向符输出
到文件 techlist.lst 中

rar vt system >techlist.lst

2) 列出 tutorial.rar 压缩文件的内容 (单纯文件名模式)

rar vb tutorial

x 带绝对路径解压

例子:

rar x -av- -c- dime 10cents.txt

解压指定的文件到当前路径。AV 检查和注释显示被禁用。

开关 (与命令结合使用):

-? 显示命令和开关的帮助。和没有参数或输入非法命令行选项时相同。

— 停止开关扫描

这个开关告诉 RAR 命令行中没有更多的开关了。如果压缩文件或文件名
以 – 符号开头,可以使用它。没有’–‘开关,这样的名字将被作为开关
对待。

例子:

从当前目录添加所有文件到固实压缩文件’-StrangeName’

RAR a -s — -StrangeName

-@[+] 禁用 [启用] 文件列表

RAR 把“@”字符开始的命令行参数作为文件列表对待。因此在默认情况
下,RAR 在遇到“@文件名”参数时会尝试读取“文件名”文件列表。但
如果存在“@文件名”的文件,RAR 将参数作为“@文件名”文件,而不是
读取文件列表的文件。

开关 -@[+] 书允许定义如何处理“@”字符开始的参数,以避免这种歧义。

如果指定了 -@,所有此开关后的参数都将被视为文件名,而不是文件列表。

如果指定了 -@+,所有此开关后的参数都将被视为文件列表,而不是文件名。

此开关不会影响位于之前的参数。

例子:

测试压缩文件 ‘@home’

rar t -@ notes.rar @home

-ac 压缩或解压后清除存档属性(只有Windows版本可用).

-ad 附加压缩文件名到目标路径中。

这个选项可以在解压一组压缩文件时使用。默认条件下 RAR 把从压缩文
件中解压的文件放在同一目录下,但是这个开关使从每个压缩文件中解压
的文件都创建一个单独的目录。

例子:

rar x -ad *.rar data\

RAR 将每一个解压的文件在’data’下创建子目录。

-ag[格式]
使用当前的日期和时间生成压缩文件名。

当创建或处理压缩文件时附加当前日期字符串到压缩文件名上。用于每日
备份。

附加的字符串格式有几种可选的格式参数定义或使用”YYYYMMDDHHMMSS”。
字符串的格式可以包含下列字符:

Y – 年
M – 月
MMM – 使用文本字符串作为月名(Jan,Feb,等.)
W – 年的第几周 (每星期从星期一开始)
A – 星期几 (星期一 -1,星期日 – 7)
D – 月的第几天
E – 年的第几天
H – 小时
M – 分 (如果在小时后,被作为分钟对待)
I – 分 (不管小时的位置,都被作为分钟对待)
S – 秒
N – 压缩文件数。RAR 搜索要生成的名字的文件是否存在,如果发现
它已经存在,将递增一个压缩文件数字,直到生成一个唯一的名字。
‘N’ 格式化字符在创建卷时不被支持。
当执行如解压等非压缩操作时,RAR的选择前第一未使用名称的现
有压缩文件或如果没有这样的压缩文件存在则设置N为1。

上面列出的每个字符串仅表示添加到压缩文件名中的一个字符。例如,
使用 WW 表示 2 数字的星期或 YYYY 定义 4 数字的年。

如果在格式化字符串的第一个字符是’+’,日期字符串和基本压缩文件名
位置交换,所以日期将在压缩文件名之前。

格式化字符串可以包含在 ‘{‘ 和 ‘}’ 包含的可选字符。此文本插入到压
缩文件名中。

所有其它字符被不变地添加到文件名上。

如果你需要处理已经存在的压缩文件,小心使用 -ag 开关。依赖于以前
使用的 -ag 传送的格式化字符串和时间,生成的和现有的压缩文件名可
能不匹配。在这种情况下 RAR 会创建或打开一个新的压缩文件,而不是
处理现有文件。你可以使用 -log 开关写入生成的压缩文件名到一个文
件,然后从文件读取它再做进一步的处理。

例子:

1) 使用默认 YYYYMMDDHHMMSS 格式

rar a -ag backup

2) 使用 DD-MMM-YY 格式

rar t -agDD-MMM-YY backup

3) 使用 YYYYMMDDHHMM 格式,替换’backup’之前的日期

rar a -ag+YYYYMMDDHHMM backup

4) 使用 YYYY-WW-A 格式,包含区段描述

rar a -agYYYY{year}-WW{week}-A{wday} backup

5) 使用 YYYYMMDD 和压缩文件数。它允许你在同一天使用 -agyymmdd-nn
数次,每一个新的压缩文件名都将包含一个新的递增数字。

rar a -agYYYYMMDD-NN backup

-ao 添加带有存档属性的文件
(只有 Windows 版本可用).

例子:

添加C:上所有带有存档属性的文件到’f:backup’,并清除文件存档属性

rar a -r -ac -ao f:backup c:\*.*

-ai 忽略文件属性。

当解压时实用此开关,RAR 不对解压的文件设置存储在压缩文件中的常
规文件属性。此开关保留由操作系统赋予新创建文件的属性。

在 Windows 中它影响存档、系统、隐藏和只读属性。在 Unix 中,用
户、组和其它文件属性。

-ap 压缩文件内部设置路径。当添加文件到压缩文件中时,路径被整合到文
件名中,解压时从文件名删除。

例如,如果你希望添加文件’readme.txt’到目录压缩文件’release’
的’DOCS\ENG’中,你可以运行:

rar a -apDOCS\ENG release readme.txt

或者解压’ENG’到当前目录中:

rar x -apDOCS release DOCS\ENG\*.*

-as 同步压缩文件内容

如果压缩时使用这个开关,这些在当前被添加文件列表中不存在的被压缩
文件将从压缩文件中删除。它对于使用这个开关和 -u(更新)组合同步一
个压缩文件和正在压缩目录的内容很便利。

例如,执行这个命令后:

rar a -u -as backup sources\*.cpp

压缩文件’backup.rar’将只包含目录’sources’中的*.cpp文件,所有其它
文件将被从压缩文件中删除。它和创建新的压缩文件很相像,但是有一个
重要的不同:如果最近备份之后没有文件被修改,这个操作比创建新的压
缩文件执行得快。

-av 添加身份校验(只有注册版本可用)。RAR将在每次新建或更新压缩文件时
添加关于创建者的信息、最后更新时间和压缩文件名。

如果一个包含身份校验的压缩文件被修改,而没有指定这个开关,则身份
校验信息将被删除。

使用’-av’开关的压缩文件当解压、测试、列表或更新时,RAR 将进行完
整性确认并显示信息:

校验身份信息…

在成功校验身份的情况下,显示消息’确定’,创建者的名字和最近更新
信息会被显示。在身份校验失败的情况下,将显示’失败’。

RAR 身份验证可以被伪造,不能提供基于公钥的现代数字签名方案同等的
安全级别。我们推荐实用此 RAR 功能仅作为信息,像一个特殊的压缩文
件注释。当关于压缩文件的创建者创建信息特别重要时,不要使用它。

为了启用身份校验功能,程序必须注册。请联系你当地的发布点或网站发
布中心。

-av- 禁止检查或添加身份校验。

-cfg- 忽略配置文件和 RAR 环境变量。

-cl 转换文件名成小写字母。

-cu 转换文件名成大写字母。

-c- 禁止显示注释。

-df 压缩后删除文件

移动文件到压缩文件中。这个开关与命令’A’组合执行和命令’M’是同一动
作。

-dh 打开共享文件

允许处理有其它应用程序打开写的文件。

如果应用程序允许对文件的读取访问,这个开关有效。但是如果文件的访
问类型是私有,文件打开操作仍然会失败。

这个选项很危险,因为它允许压缩一个文件,而同时正被其它应用程序修
改,所以小心使用。

-dr 删除文件到回收站

压缩后删除文件并把它们放到回收站中。仅可用于 Windows 版本。

-ds 添加到一个固实压缩文件时不排序。

-dw 压缩操作后清除文件

压缩后清除文件。在删除文件数据前使用 0 字节文件覆盖它们, 防止恢
复删除的文件。

请注意,这种做法是为普通硬盘设计的,但可能无法覆盖固态磁盘上的原
始文件数据,因为 SSD 磨损平衡技术的结果和更复杂的数据地址。

-ed 不添加空目录

这个开关指出空目录不被存储到被创建的压缩文件中。当解压这样一个压
缩文件时, RAR 会基于他们内部的文件路径创建非空的目录。关于空目录
的信息丢失。非空目录除了名字外(访问权限, 流, 等。)其他所有属性全
部丢失, 所以只有在你不需要保留这样的信息时使用此开关。

如果 -ed 和 ‘m’ 命令或 -df 开关一起被使用,RAR 将不能移除空的目录。

-ee 不处理扩展属性

禁止保存和修复扩展文件属性。只用于OS/2版本。

-en 不添加”压缩文件结束”块

默认情况下,RAR 在新建或更新压缩文件时在结束时添加 “压缩文件结
束”块。它允许跳过像数字安全签名等扩展数据,但是在一些特定条件下
禁用这些功能可能有用。例如,如果在一个压缩文件通过不可靠的连接在
两个系统之间传递,并且同时发送者在它里面添加新文件时,它可能对确
认在传输过程中已经接收的部分不会被另一端所修改很重要。

这个开关不能用在分卷上,因为压缩文件结束块包含正确处理卷的重要信
息。

-ep 从名称中排除路径。包含此开关时,文件在加入压缩文件时不会包含路
径信息。这可能会有在压缩文件中存在数个相同名称的结果。

-ep1 从文件名中删除底层目录。不存储在命令行中输入的路径。

例子:

tmp 目录中的所有文件和目录都将被添加到压缩文件’test’中,但是被压
缩文件名路径不包含’tmp\’

rar a -ep1 -r test tmp\*

这等价于下列命令:

cd tmp
rar a -r ..\test
cd ..

-ep2 扩展路径成完全路径。压缩时存储文件的完全路径(除了盘符和根目录路
径).

-ep3 扩展路径为包含盘符的完全路径。
仅用于 Windows 版本。

压缩时如果使用此开关则保存和恢复包括盘符的完全的文件路径。磁盘分
隔符(冒号)被下划线字符替换。

如果你解压时使用 -ep3,它把下划线改回为冒号并且把文件解压到它们
原始的目录和磁盘中。如果用户也指定了目标路径,它会被忽略。

压缩和解压恢复它们原来的状态时提取,会把 UNC 路径从\\server\share
转换为__server\share。

此开关对于把数个磁盘备份到同一个压缩文件有帮助。例如,你可以运行:

rar a -ep3 -r backup.rar c:\ d:\ e:\

来创建备份并且:

rar x -ep3 backup.rar

来恢复它。

小心使用 -ep3 开关,只有你确认压缩文件不包含任何恶意文件。换句话
说,如果是你自己创建的压缩文件或你完全相信它的作者才使用它。此开
关允许覆盖在你的计算机上任何地方的任何文件,包括重要的系统文件和
通常仅用于备份和恢复的目的。

-e[+]<属性>
指定排除或包含掩码属性文件。

<属性> 是十进位,八进位(以 ‘0’ 开头)或十六进位 (以 ‘0x’ 开头)
的数字格式。

默认, 在 <属性>没有‘+’标记, 此开关定义排除掩码。如果对 <属性>
和文件属性按位进行 AND 逻辑运算的结果不为 0,则文件将不会被处理。

如果‘+’符号存在,它指定包含掩码。只有具有在掩码中指定的属性中
的至少一种的文件会被处理。

在 Windows 版本中也可以使用D、S、H、A代替数字掩码符号表示目录和
文件的系统,隐藏,存档和只读属性。给出的属性的顺序并不重要。
Unix 版本支持 D 和 V 符号来定义目录和设备属性。

允许在命令行中把 -e<atr> 和 -e+<atr> 都指定。

示例:

1) 仅有文件夹名字而不包含它们的内容

rar a -r -e+d dirs

2) 不压缩系统和隐藏属性的文件:

rar a -esh files

-f 更新文件。可以在解压或创建压缩文件时使用。命令字符串”a -f”等价于
命令’f’,你也可以和命令’m’或’mf’一起使用’-f’ 。如果开关’-f’和命
令’x’或’e’一起使用,则只有旧文件能被从压缩文件中解压的新版本替换。

3) 不解压只读文件:

rar x -er files

-hp[p] 加密文件数据和头。

这个开关和 -p[p] 类似,但是开关 -p 只加密文件数据,而使文件名等
其它信息可见。这个开关加密所有包括文件数据、文件名、大小、属性、
注释和其它块等所有可感知压缩文件区域,所以它提供了更高的安全等
级。在压缩文件中使用-hp 加密,没有密码甚至不可能查看文件列表。

例子:

rar a -hpfGzq5yKw secret report.txt

将添加文件 report.txt 到加密的压缩文件secret.rar中,使用密码
‘fGzq5yKw’

-id[c,d,p,q]
禁用消息。

开关 -idc 禁用版权字符串。

开关 -idd 在操作结束禁止显示“完成”字符串。

开关 -idp 禁止百分比指示。

开关 -idq 打开安静模式, 仅错误消息和问题能被显示。

允许一次使用数个修饰,
如果开关 -idcdp 是正确的。

-ieml[.][地址]
使用 E-mail发送压缩文件。只有 Windows 版本可用。

附加一个使用添加命令创建或被更新的压缩文件到 E-mail 信息中。你需
要有 MAPI 兼容的E-mail客户端来使用这个开关(大部分现代的 E-mail
程序支持MAPI接口)。

你可以在开关中直接输入详细E-mail地址或留为空白。在以后可以由你的
E-mail 程序询问。可以指定用分号或逗号隔开的数个地址。

如果你添加一个’.’字母到 -ieml,成功附加到E-mail中后压缩文件会被
删除。如果创建多卷压缩文件使用这个开关,每一卷都附加单独的
E-mail 信息。

-ierr 发送所有消息到标准错误设备。

-ilog[文件名]
记录错误到文件中 (只有注册版本可用).

把错误信息写到 RAR 目录中的 rar.log 文件中。也可以在开关中指定其
它的日志文件名代替默认的 rar.log,例如,-ilogc:\log\backup.log。
如果指定的文件名不包含路径,日志文件将会使用下列默认创建:

把错误信息写到 RAR 目录中的 rar.log 文件中。如果选项 “名称” 参数
没有指定, 日志文件将会使用下列默认创建:

Unix: .rarlog 放在用户的 home 目录中;
Windows: rar.log 放在 %APPDATA%\WinRAR 目录中。

如果 “名称” 参数包含无路径的文件名, RAR 会在默认目录中使用上面指
定的名称创建日志文件.如果你想改变日志文件的位置, 需要在 “名称”参
数中包含路径和文件名。

例如:

rar a -ilogc:\log\backup.log backup d:\docs

发生错误时会创建 c:\log\backup.log 日志文件。

-inul 禁止所有消息。

-ioff 在完成操作后关闭计算机。硬件必须支持断电功能。只有 Windows 版本可用。

-isnd 允许声音。

-k 锁定压缩文件. 任何试图改变压缩文件的命令都会被忽略。

-kb 保留损坏的解压文件。

RAR 默认解压后删除 CRC 错误的文件。开关 -kb 指定 CRC 错误的文件
不会被删除。

-log[格式][=名称]
写入名称到日志文件。

此开关允许写入在压缩、解压、删除和列表命令中的压缩文件和文件名到
指定的文本文件。它的行为被 ‘格式’ 字符串定义,可以包含下面一个或
多个字符:

A – 写入压缩文件名到日志文件。如果 RAR 创建或处理了卷,所有的卷
名称都被记录。

F – 写入处理的文件名到日志文件。它包含了添加到压缩文件中和从压缩
文件中解压、删除的文件或列出的压缩文件内的文件。

P – 如果指定名称的日志文件已经存在,则附加数据到现有文件后,而不
是创建一个新的。

U – 以 Unicode 格式写入文件。

如果 ‘A’ 和 ‘F’ 都被指定,则为 ‘A’。

‘名称’ 允许指定日志文件的名称。它必须用 ‘=’ 字符和 ‘格式’ 字符串
分隔。如果 ‘名称’ 不存在,RAR 会使用默认的 rarinfo.log 文件名。

在同一命令行中允许指定多个 -log 开关。

此开关在你需要用 -ag 或 -v 开关在批处理脚本中处理创建的压缩文件时
特别有用。在使用适当的命令创建一个压缩文件,然后从 arcname.txt 读
取生成的 RAR 压缩文件名称时,你可以指定 -loga=arcname.txt。例如,
在 Windows 批处理文件中它可以是:set /p name=<arcname.txt。

例子:

1) 写入创建的卷的名字到 vollist.txt:

rar a -v100m -loga=vollist.txt volume.rar c:\data

2) 以 Unicode 格式写入生成的压缩文件名到 backup.txt:

rar a -ag -logau=backup.txt backup.rar myfiles\*

3) 写入测试过的卷的名字到 vollist.txt 和测试的卷内的压缩文件名到
filelist.txt:

rar t -log=vollist.txt -logf=filelist.txt volume.part01.rar

-m<n> 设置压缩模式:

-m0 存储 添加到压缩文件时不压缩文件。
-m1 最快 使用最快方式(低压缩)
-m2 较快 使用快速压缩方式
-m3 标准 使用标准(默认)压缩方式
-m4 较好 使用较好压缩方式(较好压缩,但是慢)
-m5 最好 使用最大压缩方式(最好的压缩,但是最慢)

如果没有指定这个开关,RAR使用-m3方式(标准压缩)。

默认情况下,RAR 在 -m1 和 -m2 模式中只使用常规压缩算法,高级算法
像声音和真彩处理只有在 -m3..-m5 模式下才启用,提升的文本压缩只有
在 -m4..-m5 中才被激活。默认值可以使用 -mc 开关替代。

-mc<参数>
设置高级压缩参数。

这个开关主要是用于进行测试和试验,在真实环境中通常最好允许 RAR
自动选择最佳参数。请注意,不适当的使用这些开关可能导致非常严重执
行和压缩损失,所以只有在你清楚理解你所要做的时候使用它。

它有下列语法:

-mc[参数1][:参数2][模块][+ 或 -]

<模块>的位置是指示压缩算法的一个字符,它必须被设置。

它有下列值:

A – 声音压缩;
C – 真彩色(RGB)数据压缩;
D – 增值压缩;
E – 32-位 x86 Intel 可执行文件压缩;
I – 64-位 Intel Itanium 可执行文件压缩;
T – 文本压缩。

在开关结尾的’+’标记应用选择的算法模块处理所有的数据,’-‘完全禁用
该模块。如果没有指定标记,RAR 将基于数据和当前的压缩模式自动选择
模块。

开关 -mc- 禁止所有可选模块,只允许常规的压缩算法。

<参数1> 和 <参数2> 根据模块而决定的参数,其描述如下。

音频压缩,增值压缩:

<参数1> 是通道的字节数 (可以是1 – 31)。RAR 拆分多位声道成单位声
道,例如,两个16位音频声道可以被 RAR 看作每个宽一字节的四个声道。

<参数2> 被忽略。

32位 x86 Intel 可执行文件压缩,
64位 Intel Itanium 可执行文件压缩,
真彩(RGB)数据压缩:

<参数1> 和 <参数2> 被忽略。

文本压缩:

<参数1> 是 PPM 算法的次序+(可以是 2 – 63)。通常高的值会略微提高
多余数据的压缩率,但是必须有足够的内存来用于 PPM。在缺乏内存的条
件下结果可能相反。更高的规则值会减慢压缩和解压的速度。

<参数2>对于 PPM 可用的以兆字节位单位的内存 (1-128)。更高的值可以
提高压缩率,但是注意PPM压缩和解压使用的内存大小相等,所以创建一
个压缩文件时如果分配太多的内存,其他人在安装了比较少内存的机器上
解压它时可能出现问题。解压缩也可以使用虚拟内存,但是可能变得非常
慢。

例子:

1) 开关 -mc1a+ 强制使用对所有数据使用8位单声道声音压缩算法。

2) 开关 -mc10:40t+ 强制使用对所有数据使用文本压缩优化算法,设置压
缩次序到 10 并分配40 MB内存。

3) 开关 -mc12t 设置压缩次序到 12,设置文本压缩顺序为12,当使用文
本压缩时,让RAR决定何时使用它。

4) 开关 -mct- -mcd- 禁止文本和增值压缩。

-md<n> 以<n>KB大小选择字典大小。必须是64,128,256,512,1024,2048或4096或
单个字母 ‘a’,’b’,’c’,’d’,’e’,’f’,’g’。

这个可变大小的字典是被压缩算法使用的专用的内存区域。如果被压缩文
件的大小(或在一个固实压缩文件中的总文件大小)比压缩文件大许多,则
通常增加字典大小会增加压缩率,减慢压缩速度和增加内存需要。

如果字典比原数据大,RAR可以减少字典大小.它可以减少内存的需要而不
会减小压缩比。

默认可变字典大小是 4096 KB.

例子:

RAR a -s -mdd sources *.asm
或者
RAR a -s -md512 sources *.asm

将使用512 KB字典创建固实压缩文件。

-ms[列表]
指定存储文件类型。

指定不压缩而直接存贮的文件类型。这个开关被用来存储已经压缩的文件,
这将帮助增加压缩速度,而不会显著的减小压缩率。

可选参数 <列表> 参数定义使用分号隔开的文件扩展名列表。例如,
-msrar;zip;jpg 将强制RAR不压缩直接存储所有的RAR和ZIP压缩文件和
JPG 图像。它也允许在列表中指定通配符文件掩码,所以 -ms*.rar;
*.zip;*.jpg 也可以工作。

如果 <列表> 没有被指定,-ms 开关将使用默认的包含下列文件类型的扩
展设置:

7z, ace, arj, bz2, cab, gz, jpeg, jpg, lha, lzh, mp3,
rar, taz, tgz, z, zip

-mt<线程>
设置线程数。仅可用于 Window 版本。

<线程> 参数可以是从 0 到 16 的值。它定义对于压缩算法活动线程的
推荐数。如果它大于 0,RAR 会使用多线程版本的压缩算法,在多处理
器系统上提供更高的速度。真实的活动线程数可能和指定的不同。

如果 <线程> 是 0,RAR 会使用单线程压缩算法。

改变 <线程> 参数轻微影响压缩率,所以如果所有其它压缩参数相等而
使用不同的 -mt 开关创建的压缩文件不会解压得一样连贯。

如果没有指定 -mt 开关,RAR 会尝试检测可用的处理器的数量并自动
选择优化的线程数。

-n<文件> 仅包含指定的文件 <文件>。通配符在文件掩码的名称和文件部分都可用。
你可以数次指定开关‘-n’。

此关不能替换通常的文件掩码,仍然需要在命令行中输入。它是一个附加
的过滤器限制处理的文件那些仅匹配在 –n 开关中指定掩码的文件。某些
时候它可以帮助减少命令行的长度。

例如,如果你需要压缩在 Project 和 Info 文件夹内的所有的 *.txt 和
*.lst 文件,你可以输入:

rar a -r text Project\*.txt Project\*.lst Info\*.txt Info\*.lst

或使用开关 -n:

rar a -r -n*.txt -n*.lst text Project Info

-n@<列表文件> 包含在指定的列表文件中列出的文件。

和 -n<文件> 开关类似,但是从列表文件读取掩码。

示例:

rar a -r -n@inclist.txt text Project Info

-oc 设置 NTFS 压缩属性。只可用于 Windows 版本。

此开关允许解压文件时恢复 NTFS 压缩属性。RAR 在创建一个压缩文件时
保存“压缩”文件属性,但是如果不指定 -oc 开关就不会恢复它们。

-ol 把符号链接作为链接而不是文件。
只有 Unix 版本可用。

-or 如果相同名字的文件已经存在则自动重命名解压的文件。重命名文件将得
到象 ‘filename(N).txt’ 的名字,’filename.txt’ 的位置是原始的文件
名,如果文件存在 ‘N’ 是从 1 增加数字。

-os 保存 NTFS 流。 只有 Win32 版本可用。

这个开关意味着只能在 NTFS 文件系统下使用,并允许储存与文件相关的
交替数据流。在 Windows 2000、XP 和更新的 Windows 版本底下尤其重要,
可以用来保存某些文件依赖信息,如文件描述。如果您使用 RAR 来备份您
的 NTFS 磁盘时,建议您指定这个开关。

-ow 当压缩时保存文件安全信息和解压时恢复它们时,使用这个开关。

Unix 版本的 RAR 当使用这个开关时保存文件所有者和组。

Windows 版本存储所有者、组、文件许可和校验信息,但是你必须有读取
它们的必需的权限。 注意只有 NTFS 文件系统支持在Windows下的文件基
本安全数据。

-o[+|-] 设置覆盖模式。可以在解压或更新文件时使用。下列模式可用:

-o 覆盖前询问
(默认用于解压文件);

-o+ 覆盖所有
(默认用于更新的压缩文件);

-o- 跳过已存在的文件。

-o+ 覆盖已存在的文件。

-o- 不覆盖已存在的文件。

-p[p] 压缩时,使用字符串<p>作为密码加密文件。密码大小写敏感。如果你在
命令行忽略密码,你会看到一个输入密码的提示。

例子:

rar a -pmyhoney secret1 *.txt

添加 *.txt文件并用密码”myhoney”加密.

-p- 不询问密码

-r 包含子文件夹,可以使用命令:
a,u,f,m,x,e,t,p,v,l,c,cf 和 s.

当使用命令 ‘a’,’u’,’f’,’m’ 将处理在所有子目录中以及当前工作目
录的中的文件。

当使用命令 x,e,t,p,v,l,c,cf 或 s 将处理在子目录以及当前工
作目录中所有压缩文件。

-r- 禁用递归。

在某些情况下,即使没有指定 -r 开关 RAR 也会自动启用递归。开关 -r-
禁止它。

压缩时如果你指定了目录名,目录名不包含通配符,即使 -r 开关没有指定,
默认 RAR 添加目录的内容。如果磁盘根目录没有把通配符作为文件掩码指定,
RAR 也会自动启用递归。开关 -r- 禁用此行为。

例子:

rar a -r- arc dirname

命令仅会添加空目录 ‘dirname’ 目录并忽略它的内容。下列命令:

rar a -r- arc c:\

会仅压缩 c: 根目录的内容并不会包含子目录。

-r0 和 -r 相似,但是当使用命令 ‘a’,’u’,’f’,’m’,将仅对包括通配符
‘*’ 和 ‘?’ 的文件掩码递归子目录。

此开关仅用于文件名。没有文件名部分的目录名,如 ‘dirname’,不受 -r0
影响,如果没有指定 -r- 开关,它们的内容被完全添加到压缩文件中。

例子:

rar a -r0 docs.rar *.doc readme.txt

从当前目录和它的子目录添加 *.doc 和仅当前文件夹中的 readme.txt 文件
到 docs.rar 压缩文件。在使用 -r 开关的情况下,RAR 会从子目录中搜索
readme.txt。

-ri<p>[:<s>]
设置优先级和休眠时间。只有在 Windows 版本的 RAR 中可用。
这个开关让 RAR 在多任务环境下时,用来控制系统载入负荷。可用任务
优先级值从 0 到 15。当 <p> 等于 0 时,使用默认任务优先级。1 对应
最低的任务优先权,15 – 最高。

休眠时间 <s> 是从 0 到 1000 (千分之一秒)的值。这是 RAR 压缩或解
压缩操作期间每次读或写时将会归还到系统的时段。休眠时间设定在几个
相同优先级任务在系统中同时运行时有用。

例子:

使用默认优先级执行 RAR,并且每次读取或写入后有10 ms的休眠

rar a -r -sfx -ri0:10 backup *.*

-rr[N] 添加数据恢复记录。这个开关在创建或修改压缩文件被用来添加压缩文件
数据的恢复记录。

-rv[N] 创建恢复卷。这个开关在创建多卷压缩文件时用来创建恢复卷。查看
‘rv[N]’命令的详细描述。

-s 创建固实压缩文件。固实格式是一种特别的压缩包。它把压缩文件内数个
或所有文件作为一个连续的数据流对待。

当添加大量小文件或类似的文件时,固实压缩的压缩率会显着增加。但它
也有几个重要的缺点:更新现有固实压缩文件速度慢,个别文件的读取速
度较慢,降低损坏恢复可能。

通常固实文件内的文件按扩展名排序,但是可以使用 -ds 开关禁用排序
或使用一个特殊文件, rarfiles.lst 来定义文件顺序。

例子:

使用512KB的字典创建固实压缩文件 sources.rar ,包含全部子目录,从
当前目录开始,只添加.asm文件:

rar a -s -md512 sources.rar *.asm -r

-s<N> 根据文件计数创建固实组

和 -s 相似,但是在压缩<N>文件后重置压缩文件的状态。通常减少压缩率,
但是也能减少损坏的固实压缩文件中的文件丢失。

-sc<字符集>[对象]
指定列表文件和压缩包注释文件的字符集。

“字符集”参数是强制的, 可以使用下列值:

U – Unicode;
A – ANSI (Windows) 编码。仅用于 Windows 版本;
O – OEM (DOS) 编码。仅用于 Windows 版本;

Unicode 格式的文件必须以 FFFE 或 FEFF Unicode 字符开头, 否则 RAR 会
忽略此开关并作为 ASCII 文本处理。

“对象”参数是可选的, 可以使用下列值:

L – 列表文件;
C – 命令文件。

它允许指定不只一个对象, 例如, -scolc。如果 ‘对象’ 参数丢失, ‘字符
集’ 会应用到所有对象。

此开关允许指定在 -z[文件] 开关中的文件的字符集, 列表文件和注释文
件在 “cw” 命令中写入。l

例子:

1) rar a -scol data @list

使用 OEM 编码读取 ‘list’ 中包含的名称。

2) rar c -scuc -zcomment.txt data

读取 comment.txt 为 Unicode 文件。

3) rar cw -scuc data comment.txt

写入 comment.txt 为 Unicode 文件。

-se 根据扩展名创建固实组

和 -s 相似,但是如果文件扩展名改变,重置压缩文件的状态。通常减少压
缩率,但是也能减少损坏的固实压缩文件中的文件丢失。

-sfx[名称]
创建自解压压缩文件。如果建立新压缩文件时使用此开关,自解压文件(使
用 default.sfx 模块或在开关中指定)将被创建。在 Windows 版本中,
default.sfx 应该在 rar.exe 所在的目录中,在 Unix 中 – 在用户的 home
目录中。在/usr/lib 或 /usr/local/lib 中。

例子:

rar a -sfxwincon.sfx myinst

使用 wincon.sfx 自解压模块创建自解压(SFX)压缩文件。

-si[名称]
当创建一个压缩文件时,从 stdin(标准输入)读取数据。选项“名称”参
数允许指定要创建的压缩文件内的标准输入数据的文件名。如果这个参数
丢失,名字会被设为“stdin”。此开关不能和 -v 一起使用。

例子:

type Tree.Far | rar a -siTree.Far tree.rar

将把 ‘type Tree.Far’ 作为 ‘Tree.Far’ 文件压缩输出.

-sv 创建互不依赖的固实压缩文件

当开始一个新的卷时,RAR 默认尽可能的尝试重置固实格式状态,但是只有
在上一次复位后,又压缩了足够多的数据。(至少几兆字节)。

这个开关会强制 RAR 忽略打包的数据大小,并试图对任何大小的分卷重置
状态。这会降低压缩率,但在固实卷组中的数个卷之一丢失或损坏时可以
增加解压部分数据的机会。

注意有时候 RAR 即使使用这个开关也无法重置状态。例如,当压缩一个
大文件成许多分割卷时就不能完成。RAR 只能在分离文件之间重置状态,
而不能用在单独文件上。

在创建不带卷的压缩文件时忽略。

-sl<大小>
仅处理大小小于在此开关的 <大小> 参数中指定的大小的文件。
参数 <大小> 必须以字节为单位指定。

-sm<大小>
仅处理大小超过在此开关的 <大小> 参数中指定的大小的文件。
参数 <大小> 必须以字节为单位指定。

-sv- 创建互相依赖的固实压缩文件

禁止卷之间重设固实状态。

这将稍微提高压缩率,但是意味着如果数个固实卷之一丢失或损坏时减
少解压部分数据的机会。

在创建不带卷的压缩文件时忽略。

-s- 禁止固实压缩

-t 压缩后测试文件。这个开关在和移动命令组合使用时非常有用,所以只有
压缩文件已经被成功测试后,文件才会被删除。

-ta<日期>
只处理指定日期之后修改的文件。

日期字符串的格式是 YYYYMMDDHHMMSS。它允许在日期字符串中插入’-‘
或 ‘:’的分隔符,并忽略后部区域。例如,下列开关是正确的:
-ta2001-11-20在内部它被转换成 -ta20011120000000 并作为”从2001
年11月20日0时0分0秒后修改的区域”对待。

-tb<日期>
只处理指定日期之前修改的文件。开关的格式和 -ta<日期> 相同。

-tk 保存原始压缩文件日期。防止当正在改变一个压缩文件时RAR修改文件。

-tl 设置压缩文件的日期为最新文件的日期。强制RAR设置改变的压缩文件的日
期为压缩文件中最新文件的日期。

-tn<时间>
处理指定时间以后的新文件。时间字符串格式时:

[<ndays>d][<nhours>h][<nminutes>m][<nseconds>s]

例如,使用开关 -tn15d 来处理更新了15天的文件,-tn2h30m 来处理更
新了2小时30分的文件。

-to<时间>
处理指定时间以前的旧文件。开关的格式和 -tn<时间> 相同。

-ts<m,c,a>[N]
保存或恢复文件时间(修改,创建,访问)。

开关 -tsm 指示 RAR 保存文件的修改时间,-tsc – 创建时间,tsa – 最
近访问时间。开关后的可选参数是 0 和 4 之间的数字来控制文件时间精
度。值‘1’启用 1 秒的精确度,2 – 0.0065536 秒, 3 – 0.0000256,4
或‘+’启用最大的 NTFS 时间精度,等于 0.0000001 秒。值‘0’或‘-’
意味着创建和访问时间不保存,并且修改时间使用低的(两秒)时间精度。
更高的精度模式添加更多的数据到压缩文件中,使用 -tsm4 -tsa4 -tsc4
组合,让每个文件增加 19 个额外的字节。如果没有指定精度,RAR 使用
‘4’(高)值。

默认的 RAR 模式是 -tsm4 -tsc0 -tsa0,所以高精度的修改时间被存储,
其它时间被忽略。

当解压文件(精度不相关,但是不能为 0)时指定 -tsc 和 -tsa 开关来设置
创建和访问时间是必需的。默认 RAR 只设置修改时间,即使压缩文件包含
创建和最近修改时间。设置修改时间来解压文件也可以使用 -tsm- 禁用。

如果你需要把这个开关应用到所有的三个时间,也可能忽略这三个类型字母。
例如,-tsm4 -tsa4 -tsc4 能被 -ts4, -ts+ 或 -ts 代替。使用 -ts- 来
只保存低精度的修改时间,或者忽略所有三个文件时间解压。

当创建一个压缩文件时,如果高的模式不被文件系统支持,RAR 会自动减少
精度。在 FAT 中不会超过两秒,在 Unix 中不会超过 1 秒。NTFS 时间精
度是 0.0000001 秒。

操作系统的时间限制解压时能被设置。Windows 允许设置三个时间,Unix –
修改时间和最近访问时间,没有创建时间。

例子:

1) rar a -ts backup

使用最高精确度存储所有文件时间。

2) rar x -tsa backup

存储修改和最近访问时间。开关 -tsm 不是必需的,因为 RAR 把它作为默
认值。

3) rar a -tsm1 -tsc1 backup

存储低精确度的修改和创建时间。没有 -tsm1 RAR 将会保存高精确的修改
时间。

-u 更新文件。 这可在解压或创建压缩文件时使用。命令字符串 ‘a -u’ 和
命令 ‘u’等效。您也可以使用开关’-u’和命令’m’和’mf’一起使用。如果开
关’-u’使用与命令’x’或’e’一起使用,则在磁盘上不存在的文件和比在磁
盘上的拷贝新的文件将从压缩文件中解压。

-v 创建自动检测大小的卷或列出所有的卷

当正在创建或正在列表卷时这个开关可以使用。

在第一种情况下,它启用卷的自动大小检测,所以新的卷将使用目标媒体
上的所有可用空间。当在可移动磁盘上创建卷时非常便利。你可以在 -v
<大小> 的描述中读到更多关于卷的信息。

在第二种情况下,在命令行中当这个开关和’V’ 或 ‘L’命令一起使用,它
强制 RAR 列出从指定卷开始的所有卷的内容。没有这个开关,RAR 只显
示单独的被指定卷的内容。

-v<大小>[k|b|f|m|M|g|G]
建立卷,大小=<大小>*1000 [*1024 | *1]。
默认此开关使用 <大小> 作为一千(1000)字节(非1024 字节)。您也可以
输入符号 “k” 来表示千字节(1024)的大小,或者符号 “b” 表示字节,兆
字节(1024 x 1024)为 -“m”,而一百万个字节是 – “M”,G字节 – ‘g’,
十亿个字节 – ‘G’ 或者使用符号 “f” 从几个预先定义的数值中选择一个。
预先定义的数值有 360、720、1200、1440 或 2880 并会使用当前软盘大
小取代。

如果大小被忽略,将使用自动检测。

它允许使用十进位小数。作为十进制的标记。例如,v1.5g 开关表示 1.5 GB。

你可以指定几个 -v 开关来为不同的卷设置不同的大小。例如:

rar a -v100k -v200k -v300k arcname

第一卷设为 100 KB 大小, 第二卷设为 200 KB, 剩下的为 300 KB。

如果在可移动磁盘上创建卷,第一卷被创建后,用户将被提示:

创建下一卷: 是/否/全部

此时,您可以改变磁盘。回答’A’将使所有的卷不暂停地被创建。

默认 RAR 卷以’volname.partNNN.rar’格式命名,NNN的地方是卷号。使
用-vn开关可能转换成其它的扩展基本命名规则,卷组中第一卷文件由.rar
的扩展名,以后卷从 .r00 到 .r99 命名。

当解压或测试多卷压缩文件时,你必须只使用第一卷的文件名。如果在驱
动器中没有下一卷并且磁盘可移动,用户会被提示:

插入磁盘带有 <下一卷名>

插入带有正确卷的磁盘并按任意键。

如果在解压过程中,下一卷没有找到或卷放在不可移动磁盘上,RAR 将显
示下列信息后中断:

没有找到 <卷名>

压缩卷不可以被修改。命令’d’,’f’,’u’,’s’ 不能在多卷组中使用。
命令’a’只可以用在创建新的多卷序列时。

也许,虽然不太可能,多卷组中文件大小可能比未压缩时大,原因是’存
储’特征(如果大小增加时不压缩)在多卷组中不能启用。

压缩卷可以是自解压格式,这样的压缩文件可使用 ‘-v’ 或 ‘-sfx’开关
创建。

例子:

创建固定大小的固实分卷压缩文件:

rar a -s -v1440 floparch.rar *.*

将创建固实的1440000字节大小的卷。

-vd 创建卷之前清除磁盘内容

当使用 ‘-vd’ 时,目标盘上的所有文件和目录都将被删除。这个开关只
能用在可移动磁盘上,使用这个开关不能删除硬盘内容。

-ver[n] 文件版本控制

当在已经存在的压缩文件中更新文件时,强制 RAR 保留前一文件版本。
旧版本被命名为’filename;n’,’n’处是版本号。

当不使用开关 -ver 解压一个压缩文件,rar 默认只解压最近添加的文件
版本,它的名字不能包含数字后缀。但是如果你正确指定了文件名,包括
版本,它也可以解压。例如,’rar x arcname’将只解压最新版本,当使
用 ‘rar x arcname file.txt;5’ 将解压 ‘file.txt;5’,如果它在压缩
文件中存在的话。

解压时如果你不带参数指定-ver开关,
RAR 将解压所有和文件掩码匹配的所有文件中的所有版本。这样版本号没
有从未压缩文件名中删除。你也可以使用数字作为-ver的参数来解压一个
具体的文件版本。它将告诉RAR只解压这个版本并从文件名中删除版本号。
例如,’rar x -ver5 arcname’ 将只解压第五版本文件。

如果压缩时你指定了‘n’参数,它会限制在压缩文件中文件版本的最大
数字。超过此限制的旧的文件版本会被移除。

-vn 使用旧风格的卷命名法则

默认 RAR 卷以’volname.partNNN.rar’格式命名,NNN的地方是卷号。使
用-vn开关可能转换成其它的扩展基本命名规则,卷组中第一卷文件由
.rar 的扩展名,以后卷从 .r00 到 .r99 命名。

-vp 每一卷后暂停

默认处理下一卷前,RAR 仅在使用可移动驱动器上并且剩余的磁盘空间
小于卷大小时询问确认。这个开关强制 RAR 在创建或解压卷前总是进行
这样的询问。例如,如果你要在创建后立即把新卷复制到其它媒体时有
用。

-w<p> 把<p>作为工作目录。这个开关可以用来分配临时文件工作目录。

-x<f> 排除指定的文件或文件夹 <f>,通配符可以用在文件名和文件掩码的路径
部分。你可以在同一命令行中数次指定开关’-x’来定义数个排除掩码。

如果掩码包含通配符,它应用到当前目录中的文件和它的子目录。没有
通配符它不递归,“filename”掩码会在压缩时仅排除当前目录中的
‘filename’ 文件或解压时排除压缩文件根目录中的 ‘filename’。

使用 “*\filename” 语法排除所有目录中的所有 “filename”。

如果你知道一个文件的确切路径,你可以是使用“路径\文件名”语法来
仅排除“文件名”的此副本。如果你在解压一个压缩文件时使用 -x路径\
文件名语法,“路径”必须是一个压缩文件内的路径,而不是在解压后的
磁盘上的文件路径。

默认,包含通配符的掩码仅应用于文件。如果你需要使用有通配符的掩码
排除多个目录,要使用特殊的语法来用于目录排除掩码。这样的掩码必须
在后面跟一个斜线的路径分隔符(Windows 是 ‘\’,Unix 是 ‘/’)。例如,
“*tmp*\”掩码会排除所有匹配 “*tmp*” 掩码的目录,”*\tmp\”会排除所有
的 ‘tmp’ 目录,由于通配符的存在,掩码会应用于当前目录和它的子目录
中的内容。

如果你要仅排除一个目录,不要使用任何通配符,指定确切的包含相对或
绝对路径的目录名。这种情况下你不需要为掩码追加附件的路径分隔符,
只有在掩码中包含通配符,需要把它们从文件排除掩码中区分出来时才必
须。

例子:

1) rar a -r -x*.jpg -x*.avi rawfiles

压缩当前目录和它的子目录中的除了 *.jpg 和 *.avi 文件外的所有文件;

2) rar a -r -x*\temp\ savec c:\*

压缩 C: 上除了 ‘temp’ 文件夹中的 ‘temp’ 目录和文件外的所有文件;

3) rar x -x*.txt docs

从 docs.rar 解压除了 *.txt 外的所有文件。

-x@<lf> 排除指定文件列表中列出的文件。如果你使用 -x@ 而没有列表文件名参数,
它会从标准输入设备读取文件名。

例子:

rar a -x@exlist.txt arch *.exe

-y 对于所有询问全部回答是。

-z[f] 从文件<f>中读取压缩文件注释。如果你需要指定注释文本文件的字符
集使用 -sc 开关。如果 <f> 没有指定, 注释从标准输入设备读取。

限制
~~~~

路径名长度小于 259 个字符。

最大的压缩文件注释的长度是 62000 字节。

命令限制:

命令 ‘d’,’u’,’f’,’c’,’cf’ 不能用于分卷压缩文件。

命令 ‘a’ 不能用来更新分卷压缩文件,只能用来创建一个新的。

返回值
~~~~~~

RAR 成功操作后返回 0 。非 0 返回码意味着操作由于某种错误被取消:

0 成功 操作成功

1 警告 没有发生致命错误

2 致命错误 发生一个致命错误

3 CRC 错误 解压缩时发生一个 CRC 错误

4 被锁定压缩文件 试图修改先前使用 ‘k’ 命令锁定的压缩文件

5 写错误 写入磁盘错误

6 打开错误 打开文件错误

7 用户错误 命令行选项错误

8 内存错误 没有足够的内存进行操作

9 创建错误 创建文件错误

10 无文件错误 没有找到与指定的掩码和选项匹配的文件。

255 用户中断 用户中断操作

术语表
~~~~~~

压缩文件 包含一个或一个以上文件的压缩和/或加密的特定文件。

压缩 减少数据大小的编码方法。

CRC 循环冗余检查。为了验证数据正确性检查特定信息的数学计算方法。

SFX 压缩文件模块执行时用于解压文件(自解压文件模块),通常是一个
.EXE格式文件。

固实 对压缩文件使用专用的压缩方式(把所有文件看成一个连续的数据
流)打包。当压缩大量小文件特别有利。

卷 压缩文件的拆分部分。拆分一个压缩文件成卷允许把它们存储在多
个移动磁盘上。固实格式卷解压时必须从序列中的第一个开始。

版权所有

(c) 1993-2012 Alexander Roshal

SHELL定时任务执行后钉钉机器人通知

最近,服务器不稳定,一些定时任务居然会出现没有执行的情况,所以,今天抽空写一个公共库,方便执行完毕调用钉钉机器人通知一下。

使用方法:将下面的代码保存为SdevSHcommon.sh文件,然后在需要的地方调用,注意,路径的正确。另外就是代码中的e**************************************************************f位置要修改为钉钉机器人的token值。要不,通知会出现错误,或者,在调用的时候指定token值。

然后在需要的地方,增加:

trap ‘finishNotice “{DATETIME}\n我这个是替换测试” 180********’ EXIT

将上面的”{DATETIME}\n我这个是替换测试”替换成你需要的内容,180********改为你的钉钉账户号,或者不填写,则通知全体。如果没有修改默认的token值则需要指定第三个参数。

其他就看代码吧,很简单的。

**********

#!/bin/bash

#
# . ./SdevSHcommon.sh
#

#
# USAGE:
# DingNotice “通知内容” [“AT谁”] [“群机器令牌”]
#
DingNotice()
{
local URL=”https://oapi.dingtalk.com/robot/send?access_token=”
# 通知内容
local MSG=$1
# at 谁
local TO=$2
# 机器人授权令牌
local TOTOKEN=$3
#
if [ “${MSG}” == “” ]; then
echo “通知内容不能为空”
exit 1
else
local datetime=$(date +”%Y-%m-%d %H:%M:%S”)
MSG=`echo ${MSG} | sed “s/{DATETIME}/${datetime}/g”`
#echo ${MSG}” – “${TO}” – “${TOTOKEN}
#exit 1
MSG=”\”msgtype\”: \”text\”,
\”text\”: {
\”content\”: \”${MSG}\”
}”
fi
if [ “${TO}” != “” ]; then
MSG=${MSG}”,”
TO=”\”at\”: {
\”atMobiles\”: [
\”${TO}\”
],
\”isAtAll\”: false
}”
fi
if [ “${TOTOKEN}” == “” ]; then
TOTOKEN=${URL}”e**************************************************************f
else
TOTOKEN=${URL}${TOTOKEN}
fi
#echo $@
#echo ${MSG}” – “${TO}” – “${TOTOKEN}
#exit 1
curl \
${TOTOKEN} \
-H ‘Content-Type: application/json’ \
-d “{
${MSG}
${TO}
}”
}

# DingNotice “测试一下”

#
# trap finishNotice EXIT
#
finishNotice()
{
# 通知内容
local MSG=$1
# at 谁
local TO=$2
DingNotice ${MSG} ${TO}
}
# trap ‘finishNotice “{DATETIME}\n我这个是替换测试” 180********’ EXIT

NGINX日志分析

需要在NGINX的nginx.conf中设置

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" $request_time';

然后需要在站点配置中开启

access_log /www_$server_port.log main;

一定要指定main这个格式名,因为上面定义了,不指定会使用默认的则没有输出时间。

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

# Check if user is root
if [ $(id -u) != “0” ]; then
echo “Error: You must be root to run this script, please use root.”
exit 1
fi

NginxLogFile=$1
if [ “${NginxLogFile}” = “” ]; then
echo “Error: must input a log’s path.”
exit 1
fi

FileName=$(basename ${NginxLogFile}|sed ‘s/\.log//’)
OutPutFileName=”Analysis_”${FileName}.txt
OutPutCSVFileName=”Analysis_”${FileName}.csv

echo “Analysis Nginx’s log : “${NginxLogFile}

# 获取最初的数据
# IP
cat ${NginxLogFile} | \
awk ‘{print $1}’ \
> a1.txt

# TIME
cat ${NginxLogFile} | \
awk ‘{print $4″]”}’ \
> a2.txt

# URL
cat ${NginxLogFile} | \
awk ‘{print $7}’ \
> a3.txt

# REQ TIME
cat ${NginxLogFile} | \
awk ‘{print $(NF)}’ \
> a4.txt

# 合并文件
paste -d ‘ ‘ a1.txt a2.txt a3.txt a4.txt > ${OutPutFileName}

# 删除临时文件
rm -rf a1.txt a2.txt a3.txt a4.txt

echo “Analysis is Success, output file name is “$(pwd)/${OutPutFileName}

# IP 访问时间 URL 响应时间
cat ${OutPutFileName} | sort | \
awk ‘$NF ~/^[0-9.]+$/ {print $1″,””\””$3″\”””,”$4}’ \
> ${OutPutCSVFileName}

echo “OK…CSV is “${OutPutCSVFileName}

微信公众号变换账户(迁移)

最近,公司的几个微信公众号合并,将不用的微信公众号都合并在一起了,诸多的麻烦,还好,腾讯还是挺贴心的。

挑选了官网相关主题比较重要的链接:

  1. 迁移条件及流程
  2. 迁移其他解答

对我们程序员最重要的是openid及unionid的问题。

10、迁移完成,原粉丝的openid会变吗?
会变化。微信用户关注不同的公众号,对应的OpenID是不一样的,迁移成功后,粉丝的OpenID以目标帐号(即新公众号)对应的OpenID为准。但开发者可以通过开发接口转换OpenID,开发文档可以参考:
提供一个openid转换的API接口,当帐号迁移后,可以通过该接口:
1. 将原帐号粉丝的openid转换为新帐号的openid。
2. 将有授权关系用户的openid转换为新帐号的openid。
3. 将卡券关联用户的openid转换为新帐号的openid。◆ 原帐号:准备要迁移的帐号,当审核完成且管理员确认后即被回收。
◆ 新帐号:用来接纳粉丝的帐号。新帐号在整个流程中均能正常使用。

一定要按照下面的步骤来操作。
1. 一定要在原帐号被冻结之前,最好是准备提交审核前,获取原帐号的用户列表。如果没有原帐号的用户列表,用不了转换工具。如果原账号被回收,这时候也没办法调用接口获取用户列表。
如何获取用户列表见这里:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140840

2. 转换openid的API接口如下,可在帐号迁移审核完成后开始调用,并最多保留15天。若帐号迁移没完成,调用时无返回结果或报错。帐号迁移15天后,该转换接口将会失效、无法拉取到数据。
◆ URL:http://api.weixin.qq.com/cgi-bin/changeopenid?access_token=xxxxx
此处token为新帐号的token
◆ 请求方式:post
◆ 请求数据:
{
“from_appid”:”xxxxxxxx”,//此处为原帐号的appid
“openid_list”:[“oEmYbwN-n24jxvk4Sox81qedINkQ”,”oEmYbwH9uVd4RKJk7ZZg6S
zL6tTo”]//需要转换的openid,即第1步中拉取的原帐号用户列表,这些必须是旧账号目前关注的才行,否则会出错;一次最多100个,不能多。
}
◆ 输出数据:
{
“errcode”: 0,
“errmsg”: “ok”,
“result_list”: [
{
“ori_openid”: “oEmYbwN-n24jxvk4Sox81qedINkQ”,
“new_openid”: “o2FwqwI9xCsVadFah_HtpPfaR-X4”,
“err_msg”: “ok”
},
{
“ori_openid”: “oEmYbwH9uVd4RKJk7ZZg6SzL6tTo”,
“err_msg”: “ori_openid error”//这个openid目前没有关注旧公众号
}
]
}
◆ 错误码:
63178:from_appid参数错误,和调用的账号并没有迁移关系
Ori_openid error:openid目前没有关注旧公众号。或者是将from_appid搞错了,用成了新帐号的appid。

xargs与tar合并查询文件并打包问题检查

今天在整理服务器上的日志的时候,希望能将日志打包保存之后再删除,然后就出现了问题了。

find /debugLog -mmin +21600 -type f -print | xargs tar cvf /debugLog_$(date +”%Y%m%d%H%M%S”).tar

会出现提示:

tar: Exiting with failure status due to previous errors

大意是上一步中存在错误,怎么查看错误是啥?

查一下,在《Linux常见问题解答–如何修复“tar:Exiting with failure status due to previous errors”》找到答案,只需要将v参数去掉就行。

使用下面的命令查看:

find /debugLog -mmin +21600 -type f -print | xargs tar cf /debugLog_$(date +”%Y%m%d%H%M%S”).tar

然后打印出好多的错误信息了:

tar: Removing leading `/’ from member names
tar: /debugLog/efast/20171204_b2c_apiv_apis_response_goods: Cannot stat: No such file or directory
tar: -: Cannot stat: No such file or directory
tar: get_all_list.txt: Cannot stat: No such file or directory
tar: /debugLog/wxauth/20180103_wxauth_115.239.174.134,: Cannot stat: No such file or directory
tar: 10.53.26.130.txt: Cannot stat: No such file or directory
tar: /debugLog/wxauth/20180103_wxauth_115.239.174.134,: Cannot stat: No such file or directory
tar: 10.53.29.194.txt: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

对于第一行的错误,百度了一下,在《“tar: Removing leading `/’ from member names”的错误》找到答案,这个因为是相对路径的缘故,需要增加P参数。

命令改为:

# find /debugLog -mmin +21600 -type f -print | xargs tar cfP /debugLog_$(date +”%Y%m%d%H%M%S”).tar

然后,继续出现下面的错误了:

tar: /debugLog/efast/20171204_b2c_apiv_apis_response_goods: Cannot stat: No such file or directory
tar: -: Cannot stat: No such file or directory
tar: get_all_list.txt: Cannot stat: No such file or directory
tar: /debugLog/wxauth/20180103_wxauth_115.239.174.134,: Cannot stat: No such file or directory
tar: 10.53.26.130.txt: Cannot stat: No such file or directory
tar:/debugLog/wxauth/20180103_wxauth_115.239.174.134,: Cannot stat: No such file or directory
tar: 10.53.29.194.txt: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

根据实际查看错误的文件名发现,这两个文件其实都有特殊:

/debugLog/efast/20171204_b2c_apiv_apis_response_goods – get_all_list.txt

/debugLog/wxauth/20180103_wxauth_115.239.174.134, 10.53.29.194.txt

因为xargs默认分割符是空格,所以,上面的就被分为5个文件了。

/debugLog/efast/20171204_b2c_apiv_apis_response_goods

get_all_list.txt

/debugLog/wxauth/20180103_wxauth_115.239.174.134,

10.53.29.194.txt

所以,我们需要将分割符换一下,代码改为下面形式就OK了~

find /debugLog -mmin +21600 -type f -print0 | xargs -0 tar cfP /debugLog_$(date +”%Y%m%d%H%M%S”).tar

完美解决,如果你需要压缩完毕后就直接删除文件,则需要增加参数

find /debugLog -mmin +21600 -type f -print0 | xargs -0 tar cfP /debugLog_$(date +”%Y%m%d%H%M%S”).tar –remove-files

就可以了。

介于上面的文件名问题,我比较不赞同直接增加参数,毕竟,架不住有时候文件名里面出现个/被解析为根目录呢?

使用下面命令麻烦了点,但是稍微比较保险,你说呢?

find /debugLog -mmin +21600 -type f -print -exec rm -rf {} \;

nginx-400 Bad Request Request Header Or Cookie Too Large

400 Bad Request
Request Header Or Cookie Too Large
nginx

今天尝试开启NGINX负载均衡,将公司的服务器连接在一起提供服务,结果,一直出现这个提示。

网上找了一圈,看到的答案都是不正确的,没办法,需要靠自己了。

下面是NGINX的配置:

upstream backend {
#server 10.*.*.*:80;
#server 10.*.*.*:8081;
#server 10.*.*.*:8082;
#server 10.*.*.*::8083;
server 127.0.0.1:80;
#server 127.0.0.1:8081;
#server 127.0.0.1:8082;
#server 127.0.0.1:8083;
}

仔细看了一下发现开启的测试的服务器是本机的80端口,然后80端口就是测试的主机,然后就不断的死循环了……

去掉就好了,好吧,不能太懒,也要注意小细节。

Linux-yum:File “/usr/bin/yum”, line 30 except KeyboardInterrupt, e: SyntaxError: invalid syntax

自从上次更新服务器开始,yum就不能用,老麻烦了,提示错误信息如下:

File “/usr/bin/yum”, line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax

这个错误从网上搜出来的原因是python版本问题,是正确的,但是没有说明怎么升级yum,不懂,还好之前备份了旧版本的python了,要不就完蛋了。

vim /usr/bin/yum

将第一行的python改为旧版本的执行程序就行。

我服务器上的是python2.6

记录一下,省的忘记,还要思考怎么解决。

电商-京东平台促销活动的优惠券领取的链接是什么

今天,负责京东平台的同仁来找我,需要从促销活动页面获取优惠券的链接,好用于其他地方客户的领取。

简单的说就是:

需要优惠券领取地址,方便运营活动页面的设计。

提供了两个网址:

  • 活动页面
    https://pro.m.jd.com/mall/active/33PhyFfqMfMWfVLSn5UHUp7SfC8X/index.html?utm_source=pdappwakeupup_20170001
  • 早期优惠券领取入口
    http://coupon.m.jd.com/coupons/show.action?key=24cdda93b39d4133a3464809cda970f4&roleId=10127994&to=https://sale.jd.com/m/act/GYor7n5HsE6OljKu.html

分析过程

从早期优惠券领取的入口,我们知道这个链接需要传入三个参数:

  1. key
  2. roleId
  3. to

我们需要从活动页面获取这三个值。

在活动页面内,我们找了一下基本没有很明显的迹象可以让我们直接获取上面的三个值,那么一般我们都是需要将正常流程走一遍,获取一些数据来作分析的。

点击领取优惠券,我们在“网络”中捕获了:

https://api.m.jd.com/client.action?functionId=newBabelAwardCollection&body=%7B%22activityId%22%3A%2233PhyFfqMfMWfVLSn5UHUp7SfC8X%22%2C%22from%22%3A%22H5node%22%2C%22scene%22%3A%221%22%2C%22args%22%3A%22key%3D618376500fad492b8e02db7418b531e3%2CroleId%3D10233358%22%2C%22mitemAddrId%22%3A%22%22%2C%22geo%22%3A%7B%22lng%22%3A%22%22%2C%22lat%22%3A%22%22%7D%7D&client=wh5&clientVersion=1.0.0&sid=1f3a6d7ad52bb790fee8a22156f2c689&uuid=15087419827841016776661&area=&_=1516760674531&callback=jsonp3

这么一大串,经过转码,我们会很明显的发现蛛丝马迹:

上面就是我们转码之后的数据,很明显body就是我们期待的内容了。

将上面的key=618376500fad492b8e02db7418b531e3,roleId=10233358分别带入:

http://coupon.m.jd.com/coupons/show.action?key=618376500fad492b8e02db7418b531e3&roleId=10233358&to=https://sale.jd.com/m/act/GYor7n5HsE6OljKu.html

然后,OK了,正确。

简单吧。

2018.01.31 京东运营找我学,我就简单的写了一个步骤,看到这边的福利哈

操作步骤:
1.先打开活动页,获取活动页的网址(类似pro.m.jd.com)。
2.用火狐或者其他的现代浏览器(按F12打开开发者工具),打开上面的页面。
3.在开发者工具内点击“网络”,再点击右边的垃圾桶清除。
4.点击“活动页面中的优惠券领取按钮”
5.在网络页面会出现很多的网址,找到以“https://api.m.jd.com/client.action?”开头的链接。
6.点击上面的链接,在消息头中,点击编辑和重发,在“查询字符串”找到body开头的字符串,复制里面的内容。
7.将上面复制的“key=字符串,roleId=数字”这样子的字眼的,代入下面的网址中。
8.
http://coupon.m.jd.com/coupons/show.action?key=字符串&roleId=数字&to=第一步内的网址

MySQL-information_schema数据库的说明及延伸的用法

我们安装完MySQL后,使用客服端查看的时候,都会看到information_schema这个库,那么这个库是做什么的呢?

下面就来分享一下。

数据库表说明:

官方开发文档:information-schema

表名 用途说明
SCHEMATA 提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES 提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
COLUMNS 提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
STATISTICS 提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。
USER_PRIVILEGES 用户权限表给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。
SCHEMA_PRIVILEGES 方案权限表给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。
TABLE_PRIVILEGES 表权限表给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。
COLUMN_PRIVILEGES 列权限表给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。
CHARACTER_SETS 字符集表提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。
COLLATIONS 提供了关于各字符集的对照信息。
COLLATION_CHARACTER_SET_APPLICABILITY 指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。
TABLE_CONSTRAINTS 描述了存在约束的表。以及表的约束类型。
KEY_COLUMN_USAGE 描述了具有约束的键列。
ROUTINES 提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。
VIEWS 给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。
TRIGGERS 提供了关于触发程序的信息。必须有super权限才能查看该表。

都是保存跟我们的数据库及表相关的数据,那么我们平时怎么利用他呢?

    • 一、TABLES
      1. 获取库中的全部表SELECT
        TABLE_NAME
        FROM
        information_schema.tables
        WHERE
        table_schema = ‘ecs_backup’
      2. 获取库中的创建时间(create_time)早于/晚于/等于某个时间的表SELECT
        TABLE_NAME
        FROM
        information_schema.tables
        WHERE
        table_schema = ‘ecs_backup’
        AND
        create_time < ‘2018-01-09’
      3. 获取库中的更新时间(update_time)早于/晚于/等于某个时间的表SELECT
        TABLE_NAME
        FROM
        information_schema.tables
        WHERE
        table_schema = ‘ecs_backup’
        AND
        update_time < ‘2018-01-09’
    • 二、COLUMNS
      1. 获取表的必填(IS_NULLABLE)字段
        SELECT
        COLUMN_NAME,COLUMN_DEFAULT,DATA_TYPE,CHARACTER_SET_NAME,COLUMN_KEY,COLUMN_TYPE,COLUMN_COMMENT
        FROM
        `information_schema`.`COLUMNS`
        WHERE
        TABLE_SCHEMA=’ecs’
        AND
        `TABLE_NAME` = ‘b2c_orders’
        AND
        IS_NULLABLE=’NO’
        ORDER BY ORDINAL_POSITION ASC
    • 三、STATISTICS
      1. 获取表的索引
        SELECT
        INDEX_NAME,COLUMN_NAME
        FROM
        `information_schema`.`STATISTICS`
        WHERE
        TABLE_NAME = ‘sdb_b2c_orders’
        AND
        INDEX_SCHEMA = ‘ecstore’

MySQL-怎么备份数据库的表

自从使用上了阿里的RDS之后,公司的MySQL服务器就彻底的歇菜了,特别是出现重大问题的时候,我根本没办法直接用备份数据还原生产环境中的数据。

主要原因是MySQL服务器环境跟RDS的备份文件环境不符合,特意去搭建一个吧,太麻烦。

现在每次有需要使用的时候,都是使用备份克隆一个实例,数据量大了,那个克隆的速度是越来越慢了。

最近正好有空想了一下这个解决方法,记录一下吧。

我经常使用phpmyadmin来管理数据库的数据,所以,我经常会做一个操作:

要操作某个表的时候,我一定是先复制一个表,重命名后当做备份,出现问题的时候我就直接重命名就好了。

那么,我可以将重要的表及表结构给按照一定的时间自动备份吗?

当然可以了哈~定时任务怎么使用我就不多说了,就说说SQL怎么写吧。

一、复制结构,数据

CREATE TABLE `ecs_backup`.`20180109_1809-sdb_b2c_goods` AS SELECT * FROM `ecs`.`sdb_b2c_goods`

二、复制结构,数据,索引

CREATE TABLE `ecs_backup`.`20180109_1809-sdb_b2c_goods` LIKE `ecs`.`sdb_b2c_goods`;
INSERT `ecs_backup`.`20180109_1809-sdb_b2c_goods` SELECT * FROM `ecs`.`sdb_b2c_goods`;

随便挑一种适合自己的方法,只需要自动生成前缀就可以执行了。

那么这类的文件肯定会越来越多的,怎么删除呢?

简单,只需要用下面的SQL获取响应的表名,然后,执行删除操作不就行了?

SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = "ecs_backup" AND CREATE_TIME < "2018-01-09 18:19"

然后,坐等出现问题后直接改名字恢复吧。

这个方法,好处就不说了,大家自己体会吧。