从ksh和compress中的文本文件中读取文件名

时间:2013-12-21 13:22:52

标签: shell unix scripting ksh

我想编写一个KornShell(ksh)脚本来读取文本文件中的文件名(包含前缀列表),如果在目录中通过循环找到它,则将其压缩。

例如:我将在文本文件中保留前缀'abcd'。

通过阅读它,我想压缩匹配名称的目录中的文件,如abcd ###。YYYYMMDDXXXXXX.txt

我不想做任何具有相同前缀但具有不同扩展名或不同模式的内容,例如abcd ###。YYYYMMDDXXXXXX.dat或abcd ###。YYYYMMDDXXXXXX.txt.Z。我只想压缩像这样的abcd ###。YYYYMMDDXXXXXX.txt匹配。

如何在ksh中实现这个?

1 个答案:

答案 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无比,更不用说gzipbzip2等。