当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 29 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-18 18:45 
头像

注册: 2009-07-17 20:57
帖子: 129
送出感谢: 0 次
接收感谢: 0 次
如题,我尝试过以下语句
for i in `ls -al|grep ^d|awk '{print $8}'|xargs`
但当文件夹名字有空格(比如“New Volume”)的时候就会出错。大家帮帮忙想个办法,先谢了!


_________________
本科农民工:
钱少,事多,离家远....
位微,权轻,责任重....
新建的个人网站


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-18 18:45 
头像

注册: 2009-07-17 20:57
帖子: 129
送出感谢: 0 次
接收感谢: 0 次
自己先顶一下。


_________________
本科农民工:
钱少,事多,离家远....
位微,权轻,责任重....
新建的个人网站


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-19 15:31 

注册: 2008-10-31 22:12
帖子: 6546
系统: 践兔
送出感谢: 18
接收感谢: 25
加引号
比如
代码:
for i in "My Value" a b c d e f "g h i j k" lm
do
    echo $i
done


_________________
代码:
] ls -ld //


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-19 15:57 
头像

注册: 2009-07-06 7:57
帖子: 25
送出感谢: 0 次
接收感谢: 0 次
这样怎么样?
ls -al|grep ^d|awk '{print $8}'|xargs|while read a;do echo $a;done


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-20 8:54 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
用 ls 加管道是最坏的选择,得自己处理各种各样的特殊符号问题。
代码:
for f in *; do echo "$f"; done

这个例子没处理隐藏文件,如果确实要处理隐藏文件,可以用 .[^.]* 来匹配。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-20 12:03 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
aerofox 写道:
用 ls 加管道是最坏的选择,得自己处理各种各样的特殊符号问题。
代码:
for f in *; do echo "$f"; done

这个例子没处理隐藏文件,如果确实要处理隐藏文件,可以用 .[^.]* 来匹配。

嗯,用find + -exec 就更强大了.


_________________
关注我的blog: ε==3


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-23 22:12 
头像

注册: 2009-07-17 20:57
帖子: 129
送出感谢: 0 次
接收感谢: 0 次
aerofox 写道:
用 ls 加管道是最坏的选择,得自己处理各种各样的特殊符号问题。
代码:
for f in *; do echo "$f"; done

这个例子没处理隐藏文件,如果确实要处理隐藏文件,可以用 .[^.]* 来匹配。


多谢了!
你的意思应该是这样吧? for f in * .*; do echo "$f"; done
但能不能只是一口气列出是文件夹的,不要列出文件文档之类的。
另外匹配隐藏文件,用 .* 就可以了吧?我试过没什么区别啊? 呵呵...


_________________
本科农民工:
钱少,事多,离家远....
位微,权轻,责任重....
新建的个人网站


最后由 lucky_yjw 编辑于 2009-07-23 22:21,总共编辑了 1 次

页首
 用户资料  
 
8 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-23 22:13 
头像

注册: 2009-07-17 20:57
帖子: 129
送出感谢: 0 次
接收感谢: 0 次
bones7456 写道:
aerofox 写道:
用 ls 加管道是最坏的选择,得自己处理各种各样的特殊符号问题。
代码:
for f in *; do echo "$f"; done

这个例子没处理隐藏文件,如果确实要处理隐藏文件,可以用 .[^.]* 来匹配。

嗯,用find + -exec 就更强大了.


我就直说算了,我想递归比较两个目录之间的文件.


_________________
本科农民工:
钱少,事多,离家远....
位微,权轻,责任重....
新建的个人网站


最后由 lucky_yjw 编辑于 2009-07-23 23:18,总共编辑了 1 次

页首
 用户资料  
 
9 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-23 22:14 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
find ./ -type d...


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-23 22:14 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
如果是文件。
代码:
ls -1 *|while read i; do
这样吧。否则,bash会扩展一切*号的。导致不对的。

就是一行一行读入。不管是find还是什么。管道都只搞整行处理的。

要不,来perl。


_________________
● 鸣学


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-24 0:01 

注册: 2008-05-03 23:42
帖子: 3681
送出感谢: 4
接收感谢: 6
引用:
但能不能只是一口气列出是文件夹的,不要列出文件文档之类的。

可以加个判断啊
for i in *; do
[ -d $i ] && echo $i
done

引用:
另外匹配隐藏文件,用 .* 就可以了吧?我试过没什么区别啊? 呵呵...

.* 里有 . 和 ..
要格外小心
一只眼曾经用 .* 误动了上层目录,看 viewtopic.php?f=123&t=189437


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-24 14:26 

注册: 2008-10-31 22:12
帖子: 6546
系统: 践兔
送出感谢: 18
接收感谢: 25
lucky_yjw 写道:
aerofox 写道:
用 ls 加管道是最坏的选择,得自己处理各种各样的特殊符号问题。
代码:
for f in *; do echo "$f"; done

这个例子没处理隐藏文件,如果确实要处理隐藏文件,可以用 .[^.]* 来匹配。


多谢了!
你的意思应该是这样吧? for f in * .*; do echo "$f"; done
但能不能只是一口气列出是文件夹的,不要列出文件文档之类的。
另外匹配隐藏文件,用 .* 就可以了吧?我试过没什么区别啊? 呵呵...

那就
代码:
for i in *
do
    if [ -d $i ]
    then
        printf "$i/   "
    fi
done ;echo


代码:
24/07/2009 14:26:25
tusooa (~/kde/src/koffice/build)
>> for i in *
> do
> if [ -d $i ]
> then
> printf "$i/  "
> elif [ -x $i ]
> then
> printf "$i*  "
> else
> printf "$i   "
> fi
> done ; echo
cmake/  CMakeCache.txt   CMakeFiles/  cmake_install.cmake   CMakeTmp/  cmake_uninstall.cmake   config-endian.h   config-openexr.h   config-opengl.h   config-prefix.h   CTestTestfile.cmake   doc/  filters/  interfaces/  karbon/  kchart/  kdgantt/  kexi/  kformula/  kivio/  kounavail/  kplato/  kpresenter/  kword/  lib/  libs/  Makefile   pics/  plugins/  servicetypes/  templates/  tools/
24/07/2009 14:27:34
tusooa (~/kde/src/koffice/build)
>>


_________________
代码:
] ls -ld //


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-24 17:19 

注册: 2009-07-13 11:49
帖子: 34
送出感谢: 0 次
接收感谢: 0 次
可以用sed

目录建了个"test 1"
代码:
ls -lt|grep "^d"
drwxr-x---   2 xxx     staff           256 Jul 24 05:18 test 1
drwxr-x---  10 xxx     staff          8192 Jul 09 21:38 jil
drwxr-x---   2 xxx     staff          4096 Apr 27 04:47 log
drwxr-x---   2 xxx     staff          4096 Mar 21 2008  drp_test.20080321


跳过前8段
代码:
ls -lt|grep "^d"|sed 's/^\([^ ]* *\)\{8\}\(.*\)$/\2/'
test 1
jil
log
drp_test.20080321


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-26 0:19 
头像

注册: 2009-07-17 20:57
帖子: 129
送出感谢: 0 次
接收感谢: 0 次
tubunu 写道:
可以用sed

目录建了个"test 1"
代码:
ls -lt|grep "^d"
drwxr-x---   2 xxx     staff           256 Jul 24 05:18 test 1
drwxr-x---  10 xxx     staff          8192 Jul 09 21:38 jil
drwxr-x---   2 xxx     staff          4096 Apr 27 04:47 log
drwxr-x---   2 xxx     staff          4096 Mar 21 2008  drp_test.20080321


跳过前8段
代码:
ls -lt|grep "^d"|sed 's/^\([^ ]* *\)\{8\}\(.*\)$/\2/'
test 1
jil
log
drp_test.20080321


对sed不太熟,呵呵...
如果有连续几个空格或者几个单词这样也可以吗?


_________________
本科农民工:
钱少,事多,离家远....
位微,权轻,责任重....
新建的个人网站


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 如何把带空格的文件夹名字作为 for 的参数列表
帖子发表于 : 2009-07-27 9:51 

注册: 2009-07-13 11:49
帖子: 34
送出感谢: 0 次
接收感谢: 0 次
lucky_yjw 写道:
tubunu 写道:
可以用sed

目录建了个"test 1"
代码:
ls -lt|grep "^d"
drwxr-x---   2 xxx     staff           256 Jul 24 05:18 test 1
drwxr-x---  10 xxx     staff          8192 Jul 09 21:38 jil
drwxr-x---   2 xxx     staff          4096 Apr 27 04:47 log
drwxr-x---   2 xxx     staff          4096 Mar 21 2008  drp_test.20080321


跳过前8段
代码:
ls -lt|grep "^d"|sed 's/^\([^ ]* *\)\{8\}\(.*\)$/\2/'
test 1
jil
log
drp_test.20080321


对sed不太熟,呵呵...
如果有连续几个空格或者几个单词这样也可以吗?


可以的,上面定义的匹配模式是从开始找任意个非空格字符再加任意个空格字符,然后重复8次,再输出后面的所有字符,例如:
drwxr-x--- 2 xxx staff 256 Jul 24 05:18 test 1
'drwxr-x--- ','2 '等都是符合模式的,第8次就是'05:18 ',再输出后面的所有,就是目录名了。由于ls -l的输出是规范的,可以这样做。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 29 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译