分页: 1 / 2

书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-27 14:51
cao627
从书上学到一条命令,如下

代码: 全选

find /home/someone -type d  | sed 's;/home/someone/;/home/someone/lt/;' | sed 's/^/mkdir -p  /' | sh -x
其中 /home/someone为当前用户的家目录

功能是find所有 /home/someone目录下的文件夹,
然后经过两道sed的工序的处理,将找到的文件夹创建在/home/someone/lt/目录下

但是执行这条命令时 /home/someone下会创建出许多空文件夹来。
从命令来理解/home/someone目录下除了创建的lt文件夹,不会再有别的文件夹创建。

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-27 15:45
枫叶饭团
技术不过关,没看出来。把这命令分拆出来一步一步的看输出应该很容易找出问题

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-27 16:37
cao627
枫叶饭团 写了:技术不过关,没看出来。把这命令分拆出来一步一步的看输出应该很容易找出问题
一步一步分过了
没查到mkdir 在/home/someone下直接创建的文件夹的输出
所有的行都被替换成了mkdir -p /home/someone/lt/...

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-27 16:49
枫叶饭团
那些空文件夹的名字呢?

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-27 17:00
lilydjwg
枫叶饭团 写了:那些空文件夹的名字呢?
看样子是遇到空格了。

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-27 17:06
cao627
枫叶饭团 写了:那些空文件夹的名字呢?
One Data Explorer Files Internet Nemu Servers .....

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-27 17:16
cao627
lilydjwg 写了:
枫叶饭团 写了:那些空文件夹的名字呢?
看样子是遇到空格了。
你是说包含空格的文件夹名吗

find 找的是 /home/someone下的文件夹

所以find的输出行都是 以/home/someone/开头
然后替换成 以mkdir -p /home/someone/lt/开头

这和空格有什么关系

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-27 18:17
lilydjwg
cao627 写了:
lilydjwg 写了:
枫叶饭团 写了:那些空文件夹的名字呢?
看样子是遇到空格了。
你是说包含空格的文件夹名吗

find 找的是 /home/someone下的文件夹

所以find的输出行都是 以/home/someone/开头
然后替换成 以mkdir -p /home/someone/lt/开头

这和空格有什么关系

代码: 全选

mkdir -vp /home/someone/lt/Whitespace Matters

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-27 18:20
cao627
lilydjwg 写了:
cao627 写了:
lilydjwg 写了:
枫叶饭团 写了:那些空文件夹的名字呢?
看样子是遇到空格了。
你是说包含空格的文件夹名吗

find 找的是 /home/someone下的文件夹

所以find的输出行都是 以/home/someone/开头
然后替换成 以mkdir -p /home/someone/lt/开头

这和空格有什么关系

代码: 全选

mkdir -vp /home/someone/lt/Whitespace Matters
懂了 谢谢

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-27 19:32
aerofox
其实对于这种问题,解决办法的第一步应该是去掉最后一个管道(| sh -x),这样就把那些命令列出来了,一看就知道哪里有问题。

另外,两个 sed 可以合为一个,因为一个 sed 内部可以有两条 s 命令。

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-28 8:17
自由建客

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-28 19:32
cao627
看过了

代码: 全选

find  ....  -exec mkdir ....{} \;
看来find命令的作者是考虑到并解决了空格文件名带来的麻烦的

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-28 19:39
lilydjwg
cao627 写了:看过了

代码: 全选

find  ....  -exec mkdir ....{} \;
看来find命令的作者是考虑到并解决了空格文件名带来的麻烦的
你错了,find 命令根本不用管这个,因为它只需要把 {} 替换成文件名就可以了。find 并不会调用 shell,而是直接 execv,所以毫无问题。

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-28 19:51
cao627
lilydjwg 写了:
cao627 写了:看过了

代码: 全选

find  ....  -exec mkdir ....{} \;
看来find命令的作者是考虑到并解决了空格文件名带来的麻烦的
你错了,find 命令根本不用管这个,因为它只需要把 {} 替换成文件名就可以了。find 并不会调用 shell,而是直接 execv,所以毫无问题。

代码: 全选

mkdir -vp /home/someone/lt/Whitespace Matters
这条命令会这样执行:
在 /home/someone/lt/目录下创建Whitespace
在当前目录下创建Matters

如果{}只是简单把find找到的内容替换进来,那么我也会在执行find .... -exec mkdir ....{} \;后,在当前目录下生成类似Matters这种由于文件名空格产生的文件
但是没有,说明{}解决了这个问题,而{}是find的一部分,所以 说:“看来find命令的作者是考虑到并解决了空格文件名带来的麻烦的”

Re: 书上学到的一条命令,将一个目录下的目录树,创建到另一个目录下,但有点不解。

发表于 : 2012-03-28 20:39
自由建客
cao627, 你没理解那个道道