如何解决创建目录的Shell脚本
| 我正在尝试创建一个简单的Shell脚本,以便在目录列表中以递归方式创建目录。 我有下一个文件结构: 一个名为v_79的目录,其中包含一个\“ dirs \”(从dir_0到dir_210)的列表,并且每个目录中都有几个名为ENSG00000 ??????的目录,其中\'?\'代表一个介于[0-9]。 我想在每个ENSG00000 ?????内部创建一个名为\“ my_dir \”的目录。迪尔斯 我知道如何在每个dir_XX \目录中创建目录, for i in ENSG00000??????; do mkdir $i/my_dir; done
但我不知道如何在v_79目录中创建所需的目录。
解决方法
如果您的当前目录包含目录\“ v_79 \”,则
for dir in v_79/dir_{0..210}/ENSG00000??????; do mkdir $dir/my_dir; done
我想知道这是否会给您一个“参数列表太长”的错误,在这种情况下,ѭ2是可行的方法。
, 如果当前目录是v_79,则可以使用find
和xargs
的组合:
find . -name \'ENSG00000......\' -type d | xargs -I DIR mkdir DIR/my_dir
, mkdir -p v_79/dir{0,1}{1,2,3}
即使v_79不存在,也会创建目录v79 / dir01,v79 / dir02,v79 / dir03,v79 / dir11,v79 / dir12和v79 / dir13。
-p选项将递归创建所有必需的目录。
, 您可以从v_79目录执行此操作:
for i in `find . -type d -name \"ENSG00000??????\"`; do mkdir $i/my_dir; done
, 这是用于dry run
-如果满意,请在mkdir之前删除回显
echo ./v_79/**/ENSG* | xargs -I% echo mkdir %/my_dir #or
echo ./v_79/**/dir_*/ENSG* | xargs -I% echo mkdir %/my_dir
您需要此bash4和\“ shopt -s globstar \”(例如,在您的个人资料中)
如果目录太多,可能会收到“参数列表太长”错误(对于第一个回显)。在这种情况下,用find
的解更好
find v_79 -type d -print | grep \'/ENSG\' | xargs -I% echo mkdir %/my_dir
在v_79中找到所有目录
仅过滤名称为ENSG的这些(您可以添加更多\“ filters \”)
运行(echo)mkdir作为结果
路径中的某处可以是空格,请使用以下命令修改以上内容:
find v_79 -type d -print0 | grep -z \'/ENSG\' | xargs -0 -I% echo mkdir %/my_dir
另外,您可以限制find命令的深度,例如:
find v_79 -depth 2 -type d -print0 | grep -z \'/ENSG\' | xargs -0 -I% echo mkdir %/my_dir
再次,以上都是空运行-删除运行回声。 ;)
, 只需添加-p选项,即可完成工作。
顺便说一句:mkdir命令的-p选项表示\“如果存在则没有错误,根据需要设置父目录\”
, 你要
mkdir v_79/dir_{0,1,2}{,3,4,5,6,7,8,9}{,9}/ENSG00000??????/my_dir
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。