我在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_GB
和es_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_CZ
,el_GR
以及与该表达式不匹配且被允许的文件?答案 0 :(得分:2)
cs
和el
都与[!e][!ns]
模式不匹配。
解压缩会排除与模式[!e][!ns]_*
匹配的所有文件。要匹配此模式文件(或目录路径),必须满足以下条件:
e
n
或s
_
(下划线)只有符合所有三个要求的文件才会从解压缩结果中排除。 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
目录中。