我有一个目录树,如下所示:
dir1
|---dir2-1
|---dir2-2
|---dir2-3
|--- ...
我只想在每个当前叶dir2-X
下创建一个新目录,比如dir3-1
,结果是:
dir1
|---dir2-1
|---dir3-1
|---dir2-2
|---dir3-1
|---dir2-3
|---dir3-1
|--- ...
我可以用管道|
吗?我天真地试图通过使用$1
来显式显示管道返回的参数,然后将它们与mkdir
一起使用,但这似乎不是正确的语法。
我想做的事情的精神是:find . -name dir2-* | xargs -n1 mkdir $1/dir3-1
。
管道不传递任何参数;它从第一个命令中获取stdout,并将其连接到第二个命令的stdin。
使用xargs
,您可以使用-I
选项指定替换字段(请参阅KamilCuk的回答(,但使用find -exec
更容易,它使用{}
作为替换字段。类似这样的东西:
find . -name 'dir2-*' -exec mkdir {}/dir3-1 ;
当然,为什么不呢:
find ./dir1 -maxdepth 2 -type d -name 'dir2-*' | xargs -d 'n' -I {} mkdir {}/dir3-1