如何用ls和管道mkdir

时间:2018-01-13 06:44:27

标签: shell

例如,有以下目录。

AAA/dir1
AAA/dir2
AAA/dir3

如何使用shell命令和管道在另一个根目录中创建具有相同名称的目录?

BBB/dir1
BBB/dir2
BBB/dir2

1 个答案:

答案 0 :(得分:1)

如果我了解您在当前工作目录./AAA下有一个级别的目录,并且您希望复制名为AAA的{​​{1}}下的第一级目录的目录结构在当前工作目录的新目录dir1, dir2, ...下,您只需要一个BBB循环和for。没有管道或mkdir -p需要。

如果要使用ls循环选择目录(而不是文件和目录),则会向glob附加一个尾随for。例如,要选择当前下的所有第一级目录,可以使用:

'/'

这将允许您遍历变量for dir in */; do 中的目录名称。 (不包括以dir开头的隐藏目录)

在这个问题中,您希望添加一个约束,您希望在'.' AAA下选择第一级目录(或dir*来准确 - 以避免选择任何{ {1}})。因此,您只需将约束添加到目录选择中,例如

dir[0-9]*

POSIX shell提供参数扩展,使用AAA/dirnotnumbered形式的子字符串替换替换for dir in AAA/dir[0-9]*/; do ${var/find/replace}的{​​{1}}第一次出现find。您可以使用它来查找$var并将其替换为replace

剩下的就是使用AAA代替BBB在新名称上调用mkdir -p,例如

BBB

仔细看看,如果您有其他问题,请告诉我。

相关问题