上传目录时排除文件

上传目录时排除文件

我编写了一个简单的 shell 脚本,用于ncftpput将本地目录中的所有目录递归上传到远程目录。我的 shell 脚本upload.sh位于此本地目录中,我想将其排除在上传之外。有什么方法可以做到这一点吗?

ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir /localDir/*

我曾尝试这样做:

for i in `ls /localDir | grep -v upload.sh`; do
  ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir /localDir/$i
done

但带空格的目录将被视为两个目录。例如,“我的目录”将被视为:

  1. /本地目录/我的
  2. /本地目录/目录

答案1

这就是为什么你应该永远不要解析输出ls。特别是如果你能用一个简单的通配符做同样的事情。

/usr/bin/env 版本狂欢

对于我在/本地目录/*; 做
    [[ "$i" = */upload.sh ]] && 继续
    ncftpput -R -v -u 我的用户名 -p 我的密码 我的地址 /remoteDir "$i"
完毕

答案2

您可以使用 find 分别上传所有其他元素:

find /localDir -mindepth 1 -maxdepth 1 ! -name "upload.sh" -exec ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir {} \;

跳过-exec其后的所有内容,仅打印匹配的文件和文件夹,以供测试。


您还可以研究IFS在 bash 中重新定义,或在 shell 中进行等效操作,但文件名包含换行符时仍然会失败。

当然,最简单的解决方案就是不要将上传器脚本与要上传的数据混合在一起……

相关内容