Bash / ZSH - 如何在for循环中处理带空格的文件名(使用[@])

时间:2017-05-18 10:37:21

标签: arrays zsh

我正在创建一个zsh脚本,用于重命名在OSX上的Path Finder中选择的文件。该脚本通过applescript获取一系列路径。然后在for循环中处理数组项以进行重命名/移动。 数组输出如下:

'/Users/bwitime/Downloads/2017-05-17 at 12.08.jpeg', '/Users/bwitime/Downloads/Raspberry Pi - 5 Book Collection.pdf'

该脚本有效,除非文件名包含空格。 这是脚本:

read -A myFiles < <( /usr/bin/osascript  <<'EOS';
tell application "Path Finder"
    set finderSelection to {}
    set selectedItems to selection
    repeat with theItem in selectedItems
        set selFile to quoted form of (get POSIX path of (contents of theItem))
        copy selFile to the end of finderSelection
    end repeat
end tell

return finderSelection
EOS
)


for i in ${myFiles[@]}
do

    FILE=$(echo "$i" | sed 's:,::g' | sed s:"'"::g)
    DIR="${FILE:h}"
    FILENAME="${FILE:t}"
    FOLDERPREFIX="${FILE:h:t}"
    mv "$FILE" "$DIR/$FOLDERPREFIX-$FILENAME"
done

$ i返回:

'/Users/bwitime/Downloads/2017-05-17
at
12.08.jpeg',
'/Users/bwitime/Downloads/Raspberry
Pi

5
Book
Collection.pdf'

我已经尝试过设置IFS ='\ n',但这不起作用,因为数组中的文件之间没有换行符。此外,双引号无效。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

尝试将内部字段分隔符设置为','

IFS=$',';
for i in ${myFiles[@]}

这似乎突破了bash的空间障碍。祝你好运!