遍历文件遇到带空格的目录

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
sdjkx
帖子: 30
注册时间: 2008-03-27 22:30
来自: 深圳
联系:

遍历文件遇到带空格的目录

#1

帖子 sdjkx » 2011-09-20 12:14

代码: 全选


for i in ${ScriptDirectory}/* ;  do
     echo "$i"
done

ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了

如何搞?
看好ubuntu
头像
Methuselar
帖子: 122
注册时间: 2009-06-04 12:06
联系:

Re: 遍历文件遇到带空格的目录

#2

帖子 Methuselar » 2011-09-20 12:27

硬要用shell来搞得话, 可以暂时把IFS替换掉:

OLDIFS=$IFS
IFS=$(echo -en "\n\b")
for i in ${ScriptDirectory}/* ; do
echo "$i"
done
IFS=$OLDIFS

最好还是用find吧. 个人喜欢coreutils用足,shell次之...
Mea Culpa!
头像
sdjkx
帖子: 30
注册时间: 2008-03-27 22:30
来自: 深圳
联系:

Re: 遍历文件遇到带空格的目录

#3

帖子 sdjkx » 2011-09-20 13:15

Methuselar 写了:硬要用shell来搞得话, 可以暂时把IFS替换掉:

OLDIFS=$IFS
IFS=$(echo -en "\n\b")
for i in ${ScriptDirectory}/* ; do
echo "$i"
done
IFS=$OLDIFS

最好还是用find吧. 个人喜欢coreutils用足,shell次之...

还是不行, 提示 IFS not found
看好ubuntu
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 遍历文件遇到带空格的目录

#4

帖子 lilydjwg » 2011-09-20 13:21

代码: 全选

find "${ScriptDirectory}" ! -name '.'
上次由 lilydjwg 在 2011-09-20 15:55,总共编辑 1 次。
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 遍历文件遇到带空格的目录

#5

帖子 我就是我2 » 2011-09-20 14:33

sdjkx 写了:

代码: 全选


for i in ${ScriptDirectory}/* ;  do
     echo "$i"
done

ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了

如何搞?

代码: 全选

for i in “${ScriptDirectory}”/* ;  do
     echo "$i"
done
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
sdjkx
帖子: 30
注册时间: 2008-03-27 22:30
来自: 深圳
联系:

Re: 遍历文件遇到带空格的目录

#6

帖子 sdjkx » 2011-09-20 17:30

感谢4楼和5楼的回复。

find 可以我知道也会,我只是想找到不用find的解决此问题的方法。

加引号的方法,我也想到过,但我是是这样加的
“${ScriptDirectory}/*”

当然不行。


谢谢两位,问题搞定!
看好ubuntu
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 遍历文件遇到带空格的目录

#7

帖子 naturalaw » 2011-09-20 18:04

sdjkx 写了:感谢4楼和5楼的回复。

find 可以我知道也会,我只是想找到不用find的解决此问题的方法。

加引号的方法,我也想到过,但我是是这样加的
“${ScriptDirectory}/*”

当然不行。


谢谢两位,问题搞定!
那是因为你不明白引号的意思?
引号要把变量给引起嘛。/分明不属于变量名
  • The eternal law
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 遍历文件遇到带空格的目录

#8

帖子 naturalaw » 2011-09-21 10:56

sdjkx 写了:感谢4楼和5楼的回复。

find 可以我知道也会,我只是想找到不用find的解决此问题的方法。

加引号的方法,我也想到过,但我是是这样加的
“${ScriptDirectory}/*”

当然不行。


谢谢两位,问题搞定!
:em20 还用了全角的引号。it should be ""
  • The eternal law
头像
leo_songwei
帖子: 178
注册时间: 2010-07-01 19:59

Re: 遍历文件遇到带空格的目录

#9

帖子 leo_songwei » 2011-09-23 17:51

替换IFS噻

IFS=$'\n'

几个字就搞定,看你写得们好恐怖的,骇死我了。
没人疼
帖子: 13
注册时间: 2010-01-11 13:13

Re: 遍历文件遇到带空格的目录

#10

帖子 没人疼 » 2011-10-13 22:35

sdjkx 写了:

代码: 全选


for i in ${ScriptDirectory}/* ;  do
     echo "$i"
done

ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了

如何搞?

代码: 全选

find  ${ScriptDirectory}/ -type f  -print0|xargs -0 ls -l
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 遍历文件遇到带空格的目录

#11

帖子 fnan » 2011-10-14 2:55

kose3@kose3-laptop:~$ ls -1 b
a b
n j
kose3@kose3-laptop:~$ s="b"
kose3@kose3-laptop:~$ for i in ${s}/*;do echo $i;done
b/a b
b/n j
kose3@kose3-laptop:~$
#怎么回事?
#明白了 ,s="b b"
#没 必要 就 不 动 IFS,find 效率不 高 ,五楼 的 .
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 遍历文件遇到带空格的目录

#12

帖子 fnan » 2011-10-14 3:53

没人疼 写了:
sdjkx 写了:

代码: 全选


for i in ${ScriptDirectory}/* ;  do
     echo "$i"
done

ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了

如何搞?

代码: 全选

find  ${ScriptDirectory}/ -type f  -print0|xargs -0 ls -l
#不 加引号?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 遍历文件遇到带空格的目录

#13

帖子 eexpress » 2011-10-14 9:28

for 那里就自动扩展了的。
你最好cd "$dir" 进入目录。
破shell就是这样麻烦的。来perl吧。
● 鸣学
没人疼
帖子: 13
注册时间: 2010-01-11 13:13

Re: 遍历文件遇到带空格的目录

#14

帖子 没人疼 » 2011-10-17 11:01

fnan 写了:
没人疼 写了:
sdjkx 写了:

代码: 全选


for i in ${ScriptDirectory}/* ;  do
     echo "$i"
done

ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了

如何搞?

代码: 全选

find  ${ScriptDirectory}/ -type f  -print0|xargs -0 ls -l
#不 加引号?
不用
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 遍历文件遇到带空格的目录

#15

帖子 fnan » 2011-10-17 19:05

没人疼 写了:
fnan 写了:
没人疼 写了:
sdjkx 写了:

代码: 全选


for i in ${ScriptDirectory}/* ;  do
     echo "$i"
done

ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了

如何搞?

代码: 全选

find  ${ScriptDirectory}/ -type f  -print0|xargs -0 ls -l
#不 加引号?
不用
#LZ想解决目录名带空格,不是文件名带空格。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
回复