Shell 脚本:根据命令正确解析空格
Shell script: parse blank spaces correctly on command
我正在编写一个脚本,使用 rsync 通过 ssh 从我的服务器获取电影(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
如何防止这些换行符的发生?
在脚本前后添加这些行是否可以解决问题?
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),解决了与空格的冲突
我正在编写一个脚本,使用 rsync 通过 ssh 从我的服务器获取电影(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
如何防止这些换行符的发生?
在脚本前后添加这些行是否可以解决问题?
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),解决了与空格的冲突