将文件名字符串拆分为数组

将文件名字符串拆分为数组

我试图获取特定目录 (/myfiles) 中所有文件的列表,然后将它们通过 sftp 传输到另一台服务器。文件的数量会有所不同,它们的名称也会有所不同 - 它们看起来像这样: 代码转换表_c_主要关系类型 代码转换表_e_交易类型

我试图将它们全部放入一个数组中,然后使用 sftp put 命令执行 while 循环(基于计数)。但是,我似乎无法将此字符串放入数组中。

这是我所拥有的:

export directory=`find -name *Table_\*`
IFS="./"
read -a filearry <<< "${directory}"

在测试期间仅填充 ${filearry[0]}。 echo ${filearry[0]} 的输出是:

Code Translation Table_c_Primary Relationship Type
Code Translation Table_e_Transaction Type
Code Translation Table_f_Appeal Code
Code Translation Table_g_Campaign Codes
Code Translation Table_h_Designation Code
Code Translation Table_i_Designation Purpose
Code Translation Table_j_Address Types
Code Translation Table_k_Degree of Graduation
Code Translation Table_l_Relationship Type
Code Translation Table_m_Activity Role
Code Translation Table_n_Activity Status Club
Code Translation Table_o_Participation Category
Code Translation Table_p_Activity Status Organization
Code Translation Table_q_Restriciton Code
Code Translation Table_c_Primary Relationship Type

编辑:这需要是由 cron 启动的自动化脚本。我并不是被迫使用 sftp,但无论我使用什么方式,它都必须是安全的。

我最终只是简化了脚本来上传目录中的所有文件,无论名称是什么。我将输出发送到一个日志文件,该文件作为文本电子邮件发送给我办公室的几个人。这封电子邮件的格式不太好。所有文件都列在同一行,使其难以阅读 - 这可以修复吗?

if [ "$(ls -A $DIR)" ]; 
then 
    printf "=====================================================\n"
    printf " $DIR contains files.\n"
    printf "=====================================================\n"
    sftp [email protected]:/upload <<EOF
    put -r /myfolder/*
    quit
EOF
    printf "=====================================================\n"
    printf "Done transfering files.\n"
    printf "=====================================================\n"
else 
    printf "No files to upload in $DIR"
fi

mailx -s 'Document Feed' [email protected] < /var/log/docfeed.log

答案1

你会得到一个像这样的文件名数组:

filenames=( *Table_* )

假设您不能只使用scp复制所有文件

scp *Table_* user@host:dir/

您可以为以下内容创建批处理脚本sftp

printf 'put "%s"\n' *Table_* | sftp user@host:/dir

如果您想在目标上重命名它们,例如用下划线替换所有空格(使用模式替换${parameter//pattern/string}):

for name in *Table_*; do
    printf 'put "%s" "%s"\n' "$name" "${name// /_}"
done | sftp user@host:/dir

另一个明显的解决方案是创建相关文件的存档并将该存档传输到其他主机:

tar -cf archive.tar *Table_*

echo 'put archive.tar' | sftp user@host:/dir

答案2

我想我在这里分裂头发但是fwiw,为了完成我最初想做的事情我可以使用:

 shopt -s nullglob
 documentarray=(*Translation*)
 for i in "${documentarray[@]}"
 do
 #sftp stuff here

 done

相关内容