【问题标题】:Shell script: parse blank spaces correctly on commandShell脚本:在命令上正确解析空格
【发布时间】:2015-11-22 13:21:44
【问题描述】:

我正在编写一个脚本,通过 ssh 使用 rsync 从我的服务器获取电影(mp4 和 mkv 文件)到我的本地计算机,但是在完整路径上有空格的文件夹时出现错误。该脚本如下所示(尚未实现太多!)

#!/bin/bash

cmd=(`find /home/pi/Transmission_Downloads/ -type f | grep .mp4`)

for i in "${cmd[@]}"; do
    echo $i
done

我得到的输出是这样的

/home/pi/Transmission_Downloads/Nightwish.Rock.in.Rio.2015.720p.WEBRip-NRD.mp4
/home/pi/Transmission_Downloads/Limitless.S01E09.HDTV.x264-LOL[ettv]/limitless.109.hdtv-lol[ettv].mp4
/home/pi/Transmission_Downloads/The.Last.Man.On.Earth.S02E07.HDTV.x264-KILLERS[ettv]/The.Last.Man.On.Earth.S02E07.HDTV.x264-KILLERS[ettv].mp4
/home/pi/Transmission_Downloads/Mom.S03E03.HDTV.x264-LOL[ettv]/mom.303.hdtv-lol[ettv].mp4
/home/pi/Transmission_Downloads/Family.Guy.S14E06.HDTV.x264-KILLERS[ettv]/Family.Guy.S14E06.HDTV.x264-KILLERS[ettv].mp4
/home/pi/Transmission_Downloads/Ant-Man.2015.720p.WEB-DL.DD5.1.H264-RARBG/RARBG.com.mp4
/home/pi/Transmission_Downloads/Heroes.Reborn.S01E10.HDTV.x264-FUM[ettv]/Heroes.Reborn.S01E10.INTERNAL.HDTV.x264-FUM[ettv].mp4
/home/pi/Transmission_Downloads/The.Middle.S07E08.HDTV.x264-LOL[ettv]/the.middle.708.hdtv-lol[ettv].mp4
/home/pi/Transmission_Downloads/Fargo.S02E06.INTERNAL.HDTV.x264-BATV[ettv]/Fargo.S02E06.INTERNAL.HDTV.x264-BATV[ettv].mp4
/home/pi/Transmission_Downloads/Family.Guy.S14E05.HDTV.x264-FLEET[rarbg]/Family.Guy.S14E05.HDTV.x264-FLEET.mp4
/home/pi/Transmission_Downloads/The
Man
in
the
High
Castle
S01E02
Sunrise
x264
poke/The_Man_in_the_High_Castle_S01E02_Sunrise_x264_poke.mp4
/home/pi/Transmission_Downloads/The.Walking.Dead.S06E06.HDTV.x264-KILLERS[ettv]/The.Walking.Dead.S06E06.HDTV.x264-KILLERS[ettv].mp4

如何防止这些换行符发生?

【问题讨论】:

    标签: shell ubuntu-14.04


    【解决方案1】:

    在脚本前后添加这些行是否可以解决问题?

    BKPIFS=$IFS
    IFS='
    ' # note this is a newline character after the first quote so IFS is set to a newline
    ... your little script
    IFS=$BKPIFS
    

    如果是这样,问题是 IFS(内部字段分隔符)默认包含空白,导致包含它的流沿空白边界拆分。因此,在备份后将 IFS 显式设置为换行符 (BKPIFS),可以解决与空格的冲突

    【讨论】:

    • 成功了,谢谢!你能解释一下这个 $IFS 是什么吗? BKPIFS 我猜是“备份 IFS”,但 IFS 是什么意思? nl 表示 nil/null?
    • 酷 - 刚刚更新了我的答案 - 你介意接受我的答案吗?
    猜你喜欢
    • 2013-06-10
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多