如何在所有子文件夹中重命名几个目录在Unix终端中

时间:2016-01-04 10:49:06

标签: terminal grep pipeline batch-rename

我有一个名为“ Experiment ”的主目录,其中我保留了几个子文件夹,如“ time_data ”,然后是几个子文件夹“ bacterial_strain “并且最终”药物浓度“写成” 0.5 mM “。所以最后的路径是:

/Experiment/time_data/bacterial_strain/0,5 mM

我想将所有子目录中的所有目录从“0,5 mM”重命名为“0,7 mM”

我尝试运行几个不同的管道:

find . -type d | grep 0,5 | mv "0,5 mM/" "0,7 mM/"

grep -r "0,5 mM" "/path_to_Experiment_folder" | mv 0,5\ mM 0,7\ mM

但终端也犯了同样的错误:

mv: rename 0,5 mM to 0,7 mM: No such file or directory

请帮助我,如何改变管道才能做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

myArray.sort(function(i1, i2) {
    return i1.index > i2.index;
});
myArray.sort(function(i1, i2) {
    return i1.y > i2.y;
});

值得注意的事情:

  1. 我注意到您的上一个子文件夹名称包含空格find . -depth -type d -name "0,5mM*" -exec mv {} Experiment/time_data/bacterial_strain/drug_concentration/0,7mM \; 。使用空格并使用空格执行0,5 mM的{​​{1}}命令对我不起作用。我不知道为什么。出于测试目的,我删除了空格字符并且上面的命令工作,也是一个类似的命令,我刚刚分开以查看可见性,我相信它会被弄清楚,但不过;)。
  2. 我使用整个路径重命名最后一个文件find。我认为所有目录的深度都是相同的,如果没有,那么你可以进一步探索-exec mv选项。
  3. 如果您有不同的深度目录或不同的名称要重命名,您还可以将上述命令封装在脚本中并在父目录上运行。
  4. 我希望这适合你。

答案 1 :(得分:0)

这应该有效:

$ find . -type d -name 0,5\ mM -print | while read dir ; do mv -v "${dir}" "${dir/0,5/0,7}" ; done

答案 2 :(得分:0)

另一种方式是:

for f in Experiment/*/*/0,5\ mM; do nf=$(dirname "$f")/0,7\ mM; mv "$f" "$nf"; done

或(如果您还有' 0.5 mM'名称,您不想重命名):

for f in Experiment/*/*/0,5\ mM; do if [ -d "$f" ]; then nf=$(dirname "$f")/0,7\ mM; mv "$f" "$nf"; fi; done

Here你可以找到其他方法来做到这一点。