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

时间:2015-09-17 13:30:54

标签: bash

我有很长的文件夹列表,彼此是兄弟姐妹,它们都以" 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 个答案:

答案 0 :(得分:2)

angle = arcsin(chordLength/(2*radius))*2 尝试创建两个目录;你想要mkdir js {}

要防止mkdir {}/js重复查找新目录,请忽略名为find的任何目录。

js

答案 1 :(得分:2)

(为什么你的find命令不起作用已在主教(现已删除)的答案中解释 - 我只是替代find)。

您可以将shell find循环替换为for,如下所示:

for i in 0*/; do mkdir "$i"js; done

答案 2 :(得分:1)

编辑后我对你的目录结构并不是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的作用:在当前目录(.)中,它找到子目录(-type d) - 除了当前目录本身(! -path .)和任何子子目录(-maxdepth 1)。在那些找到的目录中,它创建了所需的子目录(-exec ...)。 mkdir -p部分创建目录并使有关父母不存在的任何错误无声。 find用它找到的实际目录替换{}部分。