2013-01-10 86 views
1

我在zip存档以下文件夹中的内容:解压目录

ca_ES 
cs_CZ 
da_DK 
de_CH 
de_DE 
el_GR 
en_GB 
es_ES 
fi_FI 
fr_FR 
gl_ES 
it_IT 
lv_LV 
mt_MT 
nb_NO 
nl_NL 
pt_PT 
ro_RO 
sk_SK 
sl_SI 
sq_AL 
sv_SE 
tr_TR 
vi_VN 
get-new-strings.sh 
lang_check.php 
lang_check.txt 
language_list.txt 

我使用这个命令,我排除目录和文件解压缩文件,我不想:

unzip -q ${ZIP_FILE} -x ${FOLDER_PATH}/documentation/* ${FOLDER_PATH}/library/pdf/help/* ${FOLDER_PATH}/library/pdf/samples/* 

现在我试图排除上述目录的所有文件和文件夹,除了目录en_GBes_ES

我试着读this后如下:

unzip -q ${ZIP_FILE} -x ${FOLDER_PATH}/documentation/* ${FOLDER_PATH}/library/pdf/help/* ${FOLDER_PATH}/library/pdf/samples/* ${FOLDER_PATH}/lang/[!e][!ns]_* 

但它最终使解压缩后的目录内容:

cs_CZ 
el_GR 
en_GB 
es_ES 
get-new-strings.sh 
lang_check.php 
lang_check.txt 
language_list.txt 
  • 为什么cs_CZel_GR和文件不匹配表达和被允许?

回答

2

csel两者都不匹配[!e][!ns]模式。

解压缩排除与模式[!e][!ns]_*匹配的所有文件。为了匹配这个图案文件(或目录路径)必须满足以下条件:

  • 第一符号不是e
  • 第二符号没有ns
  • 第三符号是_(下划线)

只有符合所有三个要求的文件才会从解压缩结果中排除。例如cs_CZ仅匹配第一和第三。

更新(解决方案):可能工作的丑陋解决方案是排除3种模式。 假设所有的文件夹都在压缩文件的根目录:

unzip -q ${ZIP_FILE} -x [!e]?* ?[!ns]* ??[!_]* 

更新2(相对路径):这一个应该工作:

unzip -q ${ZIP_FILE} -x ${FOLDER_PATH}/documentation/* ${FOLDER_PATH}/library/pdf/help/* ${FOLDER_PATH}/library/pdf/samples/* ${FOLDER_PATH}/lang/[!e]?* ${FOLDER_PATH}/lang/?[!ns]* ${FOLDER_PATH}/lang/??[!_]* 

注意,这将会使所有的文件和en_es_${FOLDER_PATH}/lang目录中的文件夹。

+0

好吧,这是有道理的。那么我应该使用大括号语法,直接像'/ lang/{!en_GB,es_ES}'匹配名称?不确定这是否为负面字符串匹配的正确语法。 –

+0

@crypticツ据我所知,unzip不支持大括号。 –

+0

你的更新效果很好,但仍然允许'el_GR' = o( –