linux – 从filename创建目录并移动bash
发布时间:2020-12-13 19:52:15 所属栏目:Linux 来源:网络整理
导读:我有一大堆文件 BR0200.aaa.tsvBR0200.bbb.tsvBR0200.ccc.tsvBR0210.aaa.tsvBR0210.bbb.tsvBR0210.ccc.tsvW0210.aaa.tsvW0210.aaa.tsvW0210.aaa.tsv 我想基于文件名的第一部分创建一系列目录,直到第一个’.’ BR0200BR210W0210 然后将相关文件移动到正确的目
我有一大堆文件
BR0200.aaa.tsv BR0200.bbb.tsv BR0200.ccc.tsv BR0210.aaa.tsv BR0210.bbb.tsv BR0210.ccc.tsv W0210.aaa.tsv W0210.aaa.tsv W0210.aaa.tsv 我想基于文件名的第一部分创建一系列目录,直到第一个’.’ BR0200 BR210 W0210 然后将相关文件移动到正确的目录(即所有BR0200.*文件到BR0200目录). 我有一个bash脚本,但我一直在收到错误.我们将非常感激地收到任何建议. #!/bin/bash for file in BR* W0*; do dir = "${file%%.*}" if [-e $dir];then mv "$file" "$dir" else mkdir -p "$dir" mv "$file" "$dir" fi done 对不起,如果这是一个基本问题.我试过在网上搜索,但没有结果. 解决方法
在赋值中,=周围不允许有空格.
dir="${file%%.*}" 相反,测试中需要空格. if [ -e $dir ]; then ^ ^ 就风格改进而言,做一个不必要的mkdir -p并没有什么坏处,所以你可以摆脱if语句. 作业中不需要引号,因此您可以从dir =行中删除它们.尽管如此,引用在其他地方都是一个好主意,所以不要删除其他引号. 在for循环中添加额外的.*可能会更好.这样,如果您不止一次运行脚本,它将不会尝试移动这些新创建的子目录.一个巧妙的技巧(虽然不一定是改进)是将BR *.* W0 *.*缩短为{BR,W0} *.*. for file in {BR,W0}*.*; do dir=${file%%.*} mkdir -p "$dir" mv "$file" "$dir" done (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |