arrays - 在 Bash 中加入带有空格的数组元素不起作用
问题描述
我正在尝试将来自远程服务器的文件列表的内容连接成一个。我的代码试图首先将它们的路径列表放入一个数组中,我成功地做到了:
day_of_week=`date +%w`
if [[ $day_of_week == 1 ]]; then
look_back=3
else
look_back=1
fi
DATE=$(date -d "$look_back day ago" '+%Y%m%d')
SLAP_PATH="/ns/local/data/internal/SUBM/data/SLAP_376_SUBM1/data/${DATE}/processed/"
FILES=$(ssh -tq myuser@myserver "find ${SLAP_PATH} -type f -name 'subm_*lfj_in.csv'")
文件变量:
/ns/local/data/internal/SUBM/data/SLAP_376_SUBM1/data/20200129/processed/subm_144_lfj_in.csv
/ns/local/data/internal/SUBM/data/SLAP_376_SUBM1/data/20200129/processed/subm_140_lfj_in.csv
/ns/local/data/internal/SUBM/data/SLAP_376_SUBM1/data/20200129/processed/subm_145_lfj_in.csv
(...)
所以现在我试图将每个值连接到一个名为“CMD”的字符串变量中,所以我可以尝试使用类似的东西:
cat file1 file2 file3... > final_file
问题是我无法创建文件名序列。这是我的代码:
CMD=""
for ((i = 0; i < ${#FILES[@]}; i++)); do
#remove \n
tmp=`echo ${FILES[$i]} | tr -d '\n'`
#concatenate into $CMD:
CMD="$CMD $tmp"
done
echo "This is CMD: $CMD"
每次我运行我的脚本时,这就是我得到的:
$$ ./exportReconData.sh
/ns/local/data/internal/SUBM/data/SLAP_376_SUBM1/data/20200129/processed/subm_147_lfj_in.csv44_lfj_in.csv
有什么建议么?也许有更简单的方法可以做到这一点?谢谢你。
解决方案
如果要连接文件,请执行此操作。您不需要将它们的路径放在单独的变量中:
ssh myuser@myserver "find ${SLAP_PATH} -type f -name 'subm_*lfj_in.csv' -exec cat {} +" >final_file
我也被删除-t
了,ssh
因为真的没有理由分配一个伪 tty。我也删除了-q
,因为通常输出诊断消息是有原因的。
如果您想要final_file
在远程主机上,则将重定向移动到远程执行的命令中。
推荐阅读
- google-apps-script - 在谷歌日历中使用安排会议后如何获取当前事件的会议数据
- python - python for循环中的排序函数不重复
- python - 更新 Pygame 显示的更简单方法是什么?
- java - 如何在域层中标记主/默认构造函数
- firebase - 如何使用 SIM800 通过 HTTPS 请求调用谷歌云功能
- javascript - ReactJS:查找要在将调度操作的函数中使用的特定请求的 id
- excel - 如何查找/运行 RefreshAll?
- security - npm 漏洞需要手动审查 npm 审计修复不起作用
- java - 在 MicronautProject 中,使用休眠规范会抛出异常:Could not gain transaction-synchronized Session for current thread
- python - appName 函数有什么问题?