关于ls的不解

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
头像
csryan
帖子: 7
注册时间: 2010-11-07 22:12

关于ls的不解

#1

帖子 csryan » 2012-05-01 10:02

前天记得使用这个命令时
ls *.a
结果为
libpfnGen4.a libpfnNUKE.a
没有什么疑问,但是我在拷贝的时候
cp `ls *.a` ~/
却出现了无法找到目标的错误
然后,我看了一下,在当前目录下,确实没有“libpfnGen4.a libpfnNUKE.a”这两个文件(也不是隐藏文件,确认过了,就是不存在)

但是为什么“ls *.a”能显示呢,很是不解 :em06
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

Re: 关于ls的不解

#2

帖子 cuihao » 2012-05-01 12:54

代码: 全选

cp `/bin/ls *.a` ~/
如何?

错误的话贴出来看看。
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
conghung2012
帖子: 3
注册时间: 2012-05-01 13:13

Re: 关于ls的不解

#3

帖子 conghung2012 » 2012-05-01 13:17

这样用法需要使用管道命令,查一下就知道了。
头像
Cherrot
帖子: 981
注册时间: 2011-04-03 10:01
系统: Ubuntu 12.XX
来自: 帝都
联系:

Re: 关于ls的不解

#4

帖子 Cherrot » 2012-05-01 14:55

刚才试了一下,用管道是不行的

代码: 全选

cp $(ls *.a) ~/
和 cuihao 的办法是一样的 :em04

有点糊涂你的意思了,既然 ls *.a 能显示,那为什么又不存在呢……

代码: 全选

ls |grep .a
和 ls *.a 的输出结果一样吗?
Ubuntu技巧汇总http://wiki.ubuntu.org.cn/UbuntuSkills --你遇到的各种问题可能已经在里面了
我的技术博客http://www.cherrot.com
Code tells you how, comments should tell you why.
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

Re: 关于ls的不解

#5

帖子 JiangHui » 2012-05-01 15:11

代码: 全选

$ ls *.a
1.a  2.a

$ ls 0/

$ cp `ls *.a` 0

$ ls 0/
1.a  2.a
我试了可以
头像
csryan
帖子: 7
注册时间: 2010-11-07 22:12

Re: 关于ls的不解

#6

帖子 csryan » 2012-05-01 19:14

机器现在不在手里,明天直接贴图吧
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 关于ls的不解

#7

帖子 自由建客 » 2012-05-01 21:20

复制个文件搞那么麻烦!

代码: 全选

cp *.a ~/
头像
csryan
帖子: 7
注册时间: 2010-11-07 22:12

Re: 关于ls的不解

#8

帖子 csryan » 2012-05-04 8:22

不好意思,最近两天搬家,晚了点,直接上图

为啥
"ls *a"

“ls -al | grep a$"

结果不一样?
附件
screen.png
头像
hoxily
帖子: 39
注册时间: 2011-02-11 21:10

Re: 关于ls的不解

#9

帖子 hoxily » 2012-05-04 20:13

我的”ls *a“试验结果截图,10.04server机器。也很奇怪 :em01
图片
附件
我的”ls *a“试验结果截图,10.04server机器。
我的”ls *a“试验结果截图,10.04server机器。
头像
Cherrot
帖子: 981
注册时间: 2011-04-03 10:01
系统: Ubuntu 12.XX
来自: 帝都
联系:

Re: 关于ls的不解

#10

帖子 Cherrot » 2012-05-04 21:53

LS两位,这几个文件是从哪弄得呢?

我能想到的原因就是这三个文件你们没有写权限
测试一下

代码: 全选

[ -w FILE_NAME ] && echo write || echo oops
刚才我试了一下,去除文件的写权限时,复制确实会导致这个错误,有读权限也白搭
重做了实验,前面说的完全不对
上次由 Cherrot 在 2012-05-04 22:26,总共编辑 1 次。
Ubuntu技巧汇总http://wiki.ubuntu.org.cn/UbuntuSkills --你遇到的各种问题可能已经在里面了
我的技术博客http://www.cherrot.com
Code tells you how, comments should tell you why.
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 关于ls的不解

#11

帖子 自由建客 » 2012-05-04 22:09

什么乱七八遭的!
头像
yhlfh
帖子: 579
注册时间: 2006-09-02 20:42
来自: 东海明珠

Re: 关于ls的不解

#12

帖子 yhlfh » 2012-05-04 22:24

我擦,
ls *a的意思是列出当前目录下以a字母结尾的目录下的文件。你那个3个libXXX.a根本不是当前目录下,而是在当前目录下的某个以a字母结尾的目录下。
Life is like a box of chocolates, you never know what you're going to get.
头像
yhlfh
帖子: 579
注册时间: 2006-09-02 20:42
来自: 东海明珠

Re: 关于ls的不解

#13

帖子 yhlfh » 2012-05-04 22:28

楼主,我已经看到了,那三个libXXX.a文件是在那个lib.a文件夹下的。
Life is like a box of chocolates, you never know what you're going to get.
头像
hoxily
帖子: 39
注册时间: 2011-02-11 21:10

Re: 关于ls的不解

#14

帖子 hoxily » 2012-05-04 23:05

我知道楼主的问题所在了。
楼主实际目录结构应该如下:

代码: 全选

Last_exit_code=0 2012年 05月 04日 星期五 22:39:31 CST hoxily@ubuntulucid:~/test$ ls -Rla
.:
total 24
drwxr-xr-x  6 hoxily hoxily 4096 2012-05-04 22:34 .
drwxr-xr-x 19 hoxily hoxily 4096 2012-05-04 19:48 ..
drwxr-xr-x  2 hoxily hoxily 4096 2012-05-04 22:34 lib.a
drwxr-xr-x  2 hoxily hoxily 4096 2012-05-04 19:50 .macromedia
drwxr-xr-x  2 hoxily hoxily 4096 2012-05-04 19:50 .mozilla
drwxr-xr-x  2 hoxily hoxily 4096 2012-05-04 22:39 trash

./lib.a:
total 8
drwxr-xr-x 2 hoxily hoxily 4096 2012-05-04 22:34 .
drwxr-xr-x 6 hoxily hoxily 4096 2012-05-04 22:34 ..
-rwxr-xr-x 1 hoxily hoxily    0 2012-05-04 19:49 libpfnGEN2.a
-rwxr-xr-x 1 hoxily hoxily    0 2012-05-04 19:49 libpfnGEN4.a
-rwxr-xr-x 1 hoxily hoxily    0 2012-05-04 19:49 libpfnNUKE.a

./.macromedia:
total 8
drwxr-xr-x 2 hoxily hoxily 4096 2012-05-04 19:50 .
drwxr-xr-x 6 hoxily hoxily 4096 2012-05-04 22:34 ..

./.mozilla:
total 8
drwxr-xr-x 2 hoxily hoxily 4096 2012-05-04 19:50 .
drwxr-xr-x 6 hoxily hoxily 4096 2012-05-04 22:34 ..

./trash:
total 8
drwxr-xr-x 2 hoxily hoxily 4096 2012-05-04 22:39 .
drwxr-xr-x 6 hoxily hoxily 4096 2012-05-04 22:34 ..
关于'ls *a'和'ls -al | grep a$'为什么不一样的解释:
首先'ls *a'命令中的 * 符号在 bash 中有特殊含义,会被 bash 根据当前目录内容,优先扩展成 lib.a 。命令也就成了'ls lib.a', 意思就是查看当前目录下 lib.a 目录的文件目录列表。所以楼主看到了那三个 .a 文件。
关键在于 bash 对 *a 的扩展并不会包括 . 开头的文件或者目录。因此楼主用'ls *a'看不到那些以 . 开头的目录的列表信息,ls程序仅仅显示了 lib.a 目录的列表。

然后,对于'ls -al | grep a$'命令,它被 bash 忠实地执行,准确地传递了'-al'参数给 ls 命令,'a$'传给了 grep 命令。因此楼主成功的用grep命令筛选出了'ls -al'给出的当前目录下所有以a字符结尾的文件或者目录。

大概就是这样。大家一起来学Bash吧 :em01
附我模拟的目录tar包。
附件
ls_problem_directory_tree.tar.gz
我模拟的目录tar包
(271 Bytes) 已下载 50 次
头像
csryan
帖子: 7
注册时间: 2010-11-07 22:12

Re: 关于ls的不解

#15

帖子 csryan » 2012-05-07 13:21

hoxily 写了:我知道楼主的问题所在了。
楼主实际目录结构应该如下:

代码: 全选

Last_exit_code=0 2012年 05月 04日 星期五 22:39:31 CST hoxily@ubuntulucid:~/test$ ls -Rla
.:
total 24
drwxr-xr-x  6 hoxily hoxily 4096 2012-05-04 22:34 .
drwxr-xr-x 19 hoxily hoxily 4096 2012-05-04 19:48 ..
drwxr-xr-x  2 hoxily hoxily 4096 2012-05-04 22:34 lib.a
drwxr-xr-x  2 hoxily hoxily 4096 2012-05-04 19:50 .macromedia
drwxr-xr-x  2 hoxily hoxily 4096 2012-05-04 19:50 .mozilla
drwxr-xr-x  2 hoxily hoxily 4096 2012-05-04 22:39 trash

./lib.a:
total 8
drwxr-xr-x 2 hoxily hoxily 4096 2012-05-04 22:34 .
drwxr-xr-x 6 hoxily hoxily 4096 2012-05-04 22:34 ..
-rwxr-xr-x 1 hoxily hoxily    0 2012-05-04 19:49 libpfnGEN2.a
-rwxr-xr-x 1 hoxily hoxily    0 2012-05-04 19:49 libpfnGEN4.a
-rwxr-xr-x 1 hoxily hoxily    0 2012-05-04 19:49 libpfnNUKE.a

./.macromedia:
total 8
drwxr-xr-x 2 hoxily hoxily 4096 2012-05-04 19:50 .
drwxr-xr-x 6 hoxily hoxily 4096 2012-05-04 22:34 ..

./.mozilla:
total 8
drwxr-xr-x 2 hoxily hoxily 4096 2012-05-04 19:50 .
drwxr-xr-x 6 hoxily hoxily 4096 2012-05-04 22:34 ..

./trash:
total 8
drwxr-xr-x 2 hoxily hoxily 4096 2012-05-04 22:39 .
drwxr-xr-x 6 hoxily hoxily 4096 2012-05-04 22:34 ..
关于'ls *a'和'ls -al | grep a$'为什么不一样的解释:
首先'ls *a'命令中的 * 符号在 bash 中有特殊含义,会被 bash 根据当前目录内容,优先扩展成 lib.a 。命令也就成了'ls lib.a', 意思就是查看当前目录下 lib.a 目录的文件目录列表。所以楼主看到了那三个 .a 文件。
关键在于 bash 对 *a 的扩展并不会包括 . 开头的文件或者目录。因此楼主用'ls *a'看不到那些以 . 开头的目录的列表信息,ls程序仅仅显示了 lib.a 目录的列表。

然后,对于'ls -al | grep a$'命令,它被 bash 忠实地执行,准确地传递了'-al'参数给 ls 命令,'a$'传给了 grep 命令。因此楼主成功的用grep命令筛选出了'ls -al'给出的当前目录下所有以a字符结尾的文件或者目录。

大概就是这样。大家一起来学Bash吧 :em01
附我模拟的目录tar包。
正解呀,牛X

(ps.怎么送感谢呀,不会操作~,只有精神上表示一下了)
回复