如何把带空格的文件夹名字作为 for 的参数列表
- lucky_yjw
- 帖子: 129
- 注册时间: 2009-07-17 20:57
如何把带空格的文件夹名字作为 for 的参数列表
如题,我尝试过以下语句
for i in `ls -al|grep ^d|awk '{print $8}'|xargs`
但当文件夹名字有空格(比如“New Volume”)的时候就会出错。大家帮帮忙想个办法,先谢了!
for i in `ls -al|grep ^d|awk '{print $8}'|xargs`
但当文件夹名字有空格(比如“New Volume”)的时候就会出错。大家帮帮忙想个办法,先谢了!
- lucky_yjw
- 帖子: 129
- 注册时间: 2009-07-17 20:57
-
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
- 联系:
Re: 如何把带空格的文件夹名字作为 for 的参数列表
加引号
比如
比如
代码: 全选
for i in "My Value" a b c d e f "g h i j k" lm
do
echo $i
done
代码: 全选
] ls -ld //
- chenfengyuan的马甲
- 帖子: 25
- 注册时间: 2009-07-06 7:57
Re: 如何把带空格的文件夹名字作为 for 的参数列表
这样怎么样?
ls -al|grep ^d|awk '{print $8}'|xargs|while read a;do echo $a;done
ls -al|grep ^d|awk '{print $8}'|xargs|while read a;do echo $a;done
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 如何把带空格的文件夹名字作为 for 的参数列表
用 ls 加管道是最坏的选择,得自己处理各种各样的特殊符号问题。
这个例子没处理隐藏文件,如果确实要处理隐藏文件,可以用 .[^.]* 来匹配。
代码: 全选
for f in *; do echo "$f"; done
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系:
Re: 如何把带空格的文件夹名字作为 for 的参数列表
嗯,用find + -exec 就更强大了.aerofox 写了:用 ls 加管道是最坏的选择,得自己处理各种各样的特殊符号问题。这个例子没处理隐藏文件,如果确实要处理隐藏文件,可以用 .[^.]* 来匹配。代码: 全选
for f in *; do echo "$f"; done
关注我的blog: ε==3
- lucky_yjw
- 帖子: 129
- 注册时间: 2009-07-17 20:57
Re: 如何把带空格的文件夹名字作为 for 的参数列表
多谢了!aerofox 写了:用 ls 加管道是最坏的选择,得自己处理各种各样的特殊符号问题。这个例子没处理隐藏文件,如果确实要处理隐藏文件,可以用 .[^.]* 来匹配。代码: 全选
for f in *; do echo "$f"; done
你的意思应该是这样吧? for f in * .*; do echo "$f"; done
但能不能只是一口气列出是文件夹的,不要列出文件文档之类的。
另外匹配隐藏文件,用 .* 就可以了吧?我试过没什么区别啊? 呵呵...
上次由 lucky_yjw 在 2009-07-23 22:21,总共编辑 1 次。
- lucky_yjw
- 帖子: 129
- 注册时间: 2009-07-17 20:57
Re: 如何把带空格的文件夹名字作为 for 的参数列表
我就直说算了,我想递归比较两个目录之间的文件.bones7456 写了:嗯,用find + -exec 就更强大了.aerofox 写了:用 ls 加管道是最坏的选择,得自己处理各种各样的特殊符号问题。这个例子没处理隐藏文件,如果确实要处理隐藏文件,可以用 .[^.]* 来匹配。代码: 全选
for f in *; do echo "$f"; done
上次由 lucky_yjw 在 2009-07-23 23:18,总共编辑 1 次。
- HuntXu
- 帖子: 5776
- 注册时间: 2007-09-29 3:09
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
Re: 如何把带空格的文件夹名字作为 for 的参数列表
如果是文件。 这样吧。否则,bash会扩展一切*号的。导致不对的。
就是一行一行读入。不管是find还是什么。管道都只搞整行处理的。
要不,来perl。
代码: 全选
ls -1 *|while read i; do
就是一行一行读入。不管是find还是什么。管道都只搞整行处理的。
要不,来perl。
● 鸣学
-
- 帖子: 3681
- 注册时间: 2008-05-03 23:42
Re: 如何把带空格的文件夹名字作为 for 的参数列表
可以加个判断啊但能不能只是一口气列出是文件夹的,不要列出文件文档之类的。
for i in *; do
[ -d $i ] && echo $i
done
.* 里有 . 和 ..另外匹配隐藏文件,用 .* 就可以了吧?我试过没什么区别啊? 呵呵...
要格外小心
一只眼曾经用 .* 误动了上层目录,看 viewtopic.php?f=123&t=189437
-
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
- 联系:
Re: 如何把带空格的文件夹名字作为 for 的参数列表
那就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 //
-
- 帖子: 34
- 注册时间: 2009-07-13 11:49
Re: 如何把带空格的文件夹名字作为 for 的参数列表
可以用sed
目录建了个"test 1"
跳过前8段
目录建了个"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
代码: 全选
ls -lt|grep "^d"|sed 's/^\([^ ]* *\)\{8\}\(.*\)$/\2/'
test 1
jil
log
drp_test.20080321
- lucky_yjw
- 帖子: 129
- 注册时间: 2009-07-17 20:57
Re: 如何把带空格的文件夹名字作为 for 的参数列表
对sed不太熟,呵呵...tubunu 写了:可以用sed
目录建了个"test 1"跳过前8段代码: 全选
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
代码: 全选
ls -lt|grep "^d"|sed 's/^\([^ ]* *\)\{8\}\(.*\)$/\2/' test 1 jil log drp_test.20080321
如果有连续几个空格或者几个单词这样也可以吗?
-
- 帖子: 34
- 注册时间: 2009-07-13 11:49
Re: 如何把带空格的文件夹名字作为 for 的参数列表
可以的,上面定义的匹配模式是从开始找任意个非空格字符再加任意个空格字符,然后重复8次,再输出后面的所有字符,例如:lucky_yjw 写了:对sed不太熟,呵呵...tubunu 写了:可以用sed
目录建了个"test 1"跳过前8段代码: 全选
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
代码: 全选
ls -lt|grep "^d"|sed 's/^\([^ ]* *\)\{8\}\(.*\)$/\2/' test 1 jil log drp_test.20080321
如果有连续几个空格或者几个单词这样也可以吗?
drwxr-x--- 2 xxx staff 256 Jul 24 05:18 test 1
'drwxr-x--- ','2 '等都是符合模式的,第8次就是'05:18 ',再输出后面的所有,就是目录名了。由于ls -l的输出是规范的,可以这样做。