FileI编写了
function copyFile() {
local source=$1
set -x
for dictionary in $DICT_PATH; do
dictname=$(basename $dictionary)
dict_prefix=${dictname%%.*}
TARGET="gs://bucket/files"
gsutil cp -r $dictionary $TARGET
done
}
我想添加一个条件以仅复制终止为.json或.xml的文件
我写了这个
function copyFile() {
local source=$1
set -x
for dictionary in $DICT_PATH; do
dictname=$(basename $dictionary)
if [[ ${dictname: -5} == ".json" ]] || [[ ${dictname: -5} == ".xml" ]] ; then
dict_prefix=${dictname%%.*}
TARGET="gs://bucket/files"
gsutil cp -r $dictionary $TARGET
fi
done
}
但这没用。任何想法如何解决这个问题。
答案 0 :(得分:1)
xml
是比json
短的字符串,因此您的后缀太长而无法与.xml
进行比较。
# -4, not -5
if [[ ${dictname: -5} == ".json" ]] || [[ ${dictname: -4} == ".xml" ]] ; then
您可以使用[[ ... ]]
更为简单的模式匹配工具来避免此错误。
if [[ $dictname = *.json || $dictname = *.xml ]]; then
甚至是与POSIX兼容的case
语句:
case $dictname in
*.json|*.xml)
dict_prefix=${dictname%%.*}
TARGET="gs://bucket/files"
gsutil cp -r "$dictionary" "$TARGET"
;;
sac
答案 1 :(得分:0)
您可以将文件扩展名提取为${filename#*.}
。
这应该给出以下内容,
ext=${dictname#*.}
if [[ $ext == 'json']] || [[ $ext == 'xml' ]]; then
# code
fi
或者,使用正则表达式
if [[ $dictname =~ (json|xml)$ ]]; then
# code
fi
答案 2 :(得分:0)
尝试一下:
filetype=${dictionary##*.}
if [[ "$filetype" == "json" ]] || [[ "$filetype" == "xml" ]]; then
echo YES
fi