代码之家  ›  专栏  ›  技术社区  ›  ithil

使用bash在其他文件夹中创建文件夹

  •  1
  • ithil  · 技术社区  · 10 年前

    我有一长串互为兄弟的文件夹,它们都以“0”开头 并以数字命名(001、002、003…) 但名称不仅是数字,而且不相关(例如,我有0010_foo、0032_bar、0150_baz等)。 我需要在列表中的每个文件夹中创建一个新文件夹(js)。我希望使用命令行递归地执行此操作。

    我尝试过:

    $ cd path/to/my/root/folder
    $ find 0* -type d -exec mkdir js {} \;
    

    但每次尝试都会出现一个错误:“mkdir:js:file exists”。无需说我的文件夹中没有名为js的目录,但它们是扩展名为.js的文件。

    我的命令中的错误在哪里?我如何修复它?谢谢

    3 回复  |  直到 10 年前
        1
  •  2
  •   gniourf_gniourf    10 年前

    (为什么 find 命令不起作用已经在bishop(现已删除)的回答中解释过了,我只是给出一个替代方案 发现 ).

    您可以替换 发现 被炮弹击中 for 循环如下:

    for i in 0*/; do mkdir "$i"js; done
    
        2
  •  2
  •   chepner    10 年前

    mkdir js {} 尝试创建两个目录;你想要的 mkdir {}/js .

    防止 find 避免重复查找新目录,忽略任何名为 js .

    find 0* ! -path '*/js' -type d -exec mkdir {}/js \;
    
        3
  •  1
  •   bishop    10 年前

    我对编辑后的目录结构没有100%的把握,但请尝试一下:

    cd /path/to/my/root/folder
    find . -maxdepth 1 ! -path . -type d -exec mkdir -p {}/js \;
    

    似乎工作正常:

    $ cd /path/to/my/root/folder
    $ tree
    .
    ├── 001
    │   └── js
    └── 002
    $ find . -maxdepth 1 ! -path . -type d -exec mkdir -p {}/js \;
    .
    ├── 001
    │   └── js
    └── 002
        └── js
    

    这是什么 find do:在当前目录中( . ),它查找子目录( -type d )--当前目录本身除外( ! -path . )以及任何子目录( -maxdepth 1 ). 在找到的目录中,它会创建所需的子目录( -exec ... ). 这个 mkdir -p part将创建目录,并消除关于不存在的父项的任何错误。查找替换 {} 部分与找到的实际目录。

    推荐文章