分页: 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, 你没理解那个道道