2013-12-21 53 views
0

我想編寫一個KornShell(ksh)腳本來從文本文件(具有前綴列表)中讀取文件名,並通過循環在目錄中找到文件名進行壓縮。例如:從文本文件中以ksh和compress讀取文件名

例如:我會在文本文件中保留前綴'abcd'。

通過閱讀它,我想壓縮匹配這樣的ABCD ###名的目錄中的文件。YYYYMMDDXXXXXX.txt

我不想做前綴相同,但不同的擴展或不同的東西模式如abcd ###。YYYYMMDDXXXXXX.dat或abcd ###。YYYYMMDDXXXXXX.txt.Z。我只想壓縮像這樣abcd ###。YYYYMMDDXXXXXX.txt的匹配。

如何在ksh中實現這個?

+1

歡迎使用堆棧溢出,請儘快閱讀[關於]頁面請注意,明確您的文件名模板中符號的含義是個好主意,特別是不清楚是什麼「X」可能意味着它可以是'任何',或'任何字母'或'任何大寫字母'。指定您打算使用哪個壓縮程序也不會造成傷害。 –

回答

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任何字符(這是?在答案中)。如果X意味着任何大寫字母或其他內容,則相應地進行調整。年規則將接受19xx和20xx(也是10xx和29xx,但是你不可能有這樣的文件;月規則接受00..19;日規則接受00..39。如果你必須驗證更多,那麼你就不能輕易地使用一個簡單的通配正則表達式。

我以前xz作爲壓縮計劃。我不會用compress程序進行壓縮,因爲它根本不與gzip相比,更不用說bzip2xz,等等