Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terminal 如何在Unix终端中重命名所有子文件夹中的多个目录_Terminal_Grep_Pipeline_Batch Rename - Fatal编程技术网

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

Terminal 如何在Unix终端中重命名所有子文件夹中的多个目录,terminal,grep,pipeline,batch-rename,Terminal,Grep,Pipeline,Batch Rename,我有一个名为“实验”的主目录,其中我保存了几个子文件夹,比如“时间数据”,然后是几个子文件夹“细菌菌株”,最后是“药物浓度”,写得像“0,5mm”。因此,最终的路径是: /Experiment/time_data/bacterial_strain/0,5 mM 我想将所有子目录中的所有目录从“0,5mm”重命名为“0,7mm” 我尝试运行几个不同的管道,如下所示: find . -type d | grep 0,5 | mv "0,5 mM/" "0,7 mM/" 或 但终端也犯了同样的错误

我有一个名为“实验”的主目录,其中我保存了几个子文件夹,比如“时间数据”,然后是几个子文件夹“细菌菌株”,最后是“药物浓度”,写得像“0,5mm”。因此,最终的路径是:

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

我尝试运行几个不同的管道,如下所示:

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

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

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

请帮助我,如何更改管道以实现此目的?

您可以尝试以下方法:

find . -depth -type d -name "0,5mM*" -exec mv {} 
Experiment/time_data/bacterial_strain/drug_concentration/0,7mM \;
值得注意的事情:

  • 我注意到您的最后一个子文件夹名称包含一个空格
    0.5mm
    find
    命令使用空格并使用空格执行
    -exec mv
    对我来说不起作用。我不知道为什么。出于测试目的,我删除了空格字符,上面的命令也起作用,而且它是一个类似于命令的命令,我只是为了可见性而将其分开,我相信这会被解决,但无论如何;)
  • 我使用了整个路径来重命名最后一个文件
    0,5mM
    。我假设您的所有目录深度都是相同的,如果不是,那么您可能可以进一步探索
    -depth
    选项
  • 如果要重命名的目录或名称不同,还可以将上述命令封装在脚本中,并在父目录上运行
  • 我希望这对你有用。

    这应该有用:

    $ find . -type d -name 0,5\ mM -print | while read dir ; do mv -v "${dir}" "${dir/0,5/0,7}" ; done
    
    另一种方式是:

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