我有很长的文件夹列表,彼此是兄弟姐妹,它们都以" 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的文件。
我的命令中的错误在哪里以及如何解决?谢谢!
答案 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用它找到的实际目录替换{}
部分。