Shell 从ksh中的文本文件读取文件名并压缩
我想编写一个KornShell(ksh)脚本,从一个文本文件(具有前缀列表)中读取文件名,如果通过循环在目录中找到它,则对其进行压缩 例:我将在文本文件中保留前缀“abcd” 通过阅读它,我想压缩目录中与名称匹配的文件,如abcd####.YYYYMMDDXXXXXX.txt 我不想用相同的前缀做任何事情,但要使用不同的扩展名或不同的模式,如abcd###########.yyyyymmddxxxxx.txt.Z。我只想像这样压缩匹配,仅限于abcd###.YYYYMMDDXXXXXX.txtShell 从ksh中的文本文件读取文件名并压缩,shell,unix,scripting,ksh,Shell,Unix,Scripting,Ksh,我想编写一个KornShell(ksh)脚本,从一个文本文件(具有前缀列表)中读取文件名,如果通过循环在目录中找到它,则对其进行压缩 例:我将在文本文件中保留前缀“abcd” 通过阅读它,我想压缩目录中与名称匹配的文件,如abcd####.YYYYMMDDXXXXXX.txt 我不想用相同的前缀做任何事情,但要使用不同的扩展名或不同的模式,如abcd###########.yyyyymmddxxxxx.txt.Z。我只想像这样压缩匹配,仅限于abcd###.YYYYMMDDXXXXXX.txt
如何在ksh中实现这一点?表面上看,这应该做到:
: ${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
:${COMPRESS:=xz}
读前缀时
做
$COMPRESS${prefix}[0-9][0-9][0-9][12][09][0-9][0-9][01][0-9][0-3][0-9].txt
完成<文件
显然,我不得不猜测,#
表示一个数字,YYYYMMDD
是一个日期,X
是任何字符(答案中是?
)。如果X
是大写字母或其他字母,请相应调整。年份规则将接受19xx和20xx(也包括10xx和29xx,但您不太可能有这样的日期;月份规则接受00..19;日期规则接受00..39。如果您必须验证更多,那么您就不能轻易使用简单的全局正则表达式
我使用了
xz
作为压缩程序。我不会使用compress
程序进行压缩,因为它根本无法与gzip
进行比较,更不用说bzip2
或xz
等了。欢迎使用堆栈溢出。请尽快阅读本页。请注意,明确您的意思是什么是一个好主意文件名模板中的符号。特别是,X
的含义不清楚。它可以是“任何东西”,或“任何字母”或“任何大写字母”。指定您计划使用的压缩程序也不会有什么坏处。