在我的一个bash脚本中,我有这个变量,包含要从tar
中排除的目录列表,以及要处理的父目录:
EXLIST="\
--exclude='/data/sub1/*' \
--exclude='/data/sub2/*' \
--exclude='/data/sub3/*' \
/data \
"
echo ${EXLIST} | /usr/bin/xargs -0 tar -cf _data.tar
然而,tar懦弱地拒绝创建一个空档案,因为它取代${EXLIST}
后真正得到的是:
echo --exclude='/data/sub1/*' | /usr/bin/xargs -0 tar -cf /home/_data.tar
这告诉我换行了吗?
我当然可以将EXLIST
定义为一条长行,但我不愿意,因为这会使列表的可读性降低。
有没有办法在 bash 中将行“扁平化”为字符串,以便tar
可以处理它?</ p>
答案 0 :(得分:3)
在这种情况下,您应该使用数组,不使用xargs。
EXLIST=("--exclude='/data/sub1/*'" \
"--exclude='/data/sub2/*'" \
"--exclude='/data/sub3/*'" \
"/data")
tar -cf _data.tar "${EXLIST[@]}"
使用此方法,数组的每个元素都是tar的单独参数。