Shell 从ksh中的文本文件读取文件名并压缩

Shell 从ksh中的文本文件读取文件名并压缩,shell,unix,scripting,ksh,Shell,Unix,Scripting,Ksh,我想编写一个KornShell(ksh)脚本,从一个文本文件(具有前缀列表)中读取文件名,如果通过循环在目录中找到它,则对其进行压缩 例:我将在文本文件中保留前缀“abcd” 通过阅读它,我想压缩目录中与名称匹配的文件,如abcd####.YYYYMMDDXXXXXX.txt 我不想用相同的前缀做任何事情,但要使用不同的扩展名或不同的模式,如abcd###########.yyyyymmddxxxxx.txt.Z。我只想像这样压缩匹配,仅限于abcd###.YYYYMMDDXXXXXX.txt

我想编写一个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
的含义不清楚。它可以是“任何东西”,或“任何字母”或“任何大写字母”。指定您计划使用的压缩程序也不会有什么坏处。