我想编写一个KornShell(ksh)脚本来读取文本文件中的文件名(包含前缀列表),如果在目录中通过循环找到它,则将其压缩。
例如:我将在文本文件中保留前缀'abcd'。
通过阅读它,我想压缩匹配名称的目录中的文件,如abcd ###。YYYYMMDDXXXXXX.txt
我不想做任何具有相同前缀但具有不同扩展名或不同模式的内容,例如abcd ###。YYYYMMDDXXXXXX.dat或abcd ###。YYYYMMDDXXXXXX.txt.Z。我只想压缩像这样的abcd ###。YYYYMMDDXXXXXX.txt匹配。
如何在ksh中实现这个?
答案 0 :(得分:2)
表面上看,这应该做到:
: ${COMPRESS:=xz}
while read prefix
do
$COMPRESS ${prefix}[0-9][0-9][0-9].[12][09][0-9][0-9][01][0-9][0-3][0-9]??????.txt
done < file
显然,我必须做出一些猜测,#
表示数字,YYYYMMDD
是日期,X
是任何字符({{1}在答案中)。如果?
意味着是任何大写字母或其他内容,请相应地进行调整。年份规则将接受19xx和20xx(也是10xx和29xx,但您不太可能有类似日期的文件;月规则接受00..19;当天规则接受00..39。如果您必须验证更多,那么你就不能轻易使用简单的globbing正则表达式。
我使用X
作为压缩程序。我不会将xz
程序用于压缩,因为它只是与compress
无比,更不用说gzip
或bzip2
等。