【问题标题】:How to handle spaces in filenames using double quotes in a Bash script如何在 Bash 脚本中使用双引号处理文件名中的空格
【发布时间】:2015-09-24 17:58:44
【问题描述】:

我们在我们的 Debian 服务器上运行了一个脚本,它抓取目录中的文件名并将它们推送到我们的 API。当文件名没有空格时它运行良好。这个常见问题的通常答案是在变量名周围使用双引号。

但是,对于我们的特定案例,我找不到一个简洁、简短和明确的解决方案——下面的代码。尽管this answer 建议将分隔符从空格更改为\n,但我宁愿在现有代码中直接使用双引号方法。

以下是代码的相关部分:

files=("$(ls $directory)") #$directory has the files we want to loop through

if [ ${#files[@]} -gt 0 ]; then
    getToken
    for i in $files
    do
        echo "$i"
        uploadFiles "$i"
    done
    exit
else
    echo "No files to upload"
    exit
fi

【问题讨论】:

标签: bash filenames


【解决方案1】:

要处理其中包含空格的文件,请将您的脚本编写如下:

shopt -s nullglob
files=("$directory"/*)

for i in "${files[@]}"
do  
  echo "$i"
  uploadFiles "$i"
done

或者如果你不需要保留数组,你可以这样做

shopt -s nullglob

for i in "$directory"/*
do  
  echo "$i"
  uploadFiles "$i"
done

【讨论】:

  • 谢谢 - 每次脚本运行时我们只使用一次数组。它在一个项目关键的 cron 作业 ATM 上运行,所以一旦我们能够停止/重新启动它并接受它是否一切顺利,我就会尝试这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 2020-04-06
  • 2013-12-25
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
相关资源
最近更新 更多