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.

阅读此内容后,我尝试了以下操作:

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并且文件与该表达式不匹配并且被允许?
4

1 回答 1

2

cs并且el两者都不匹配[!e][!ns]模式。

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

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

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

更新(解决方案建议):可能有效的丑陋解决方案是排除 3 种模式。假设所有文件夹都在 zip 文件的根目录中:

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

于 2013-01-10T08:36:34.070 回答