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

16 浏览
0 Comments

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

我有一个名为Experiment的主目录,在其中我保存了几个子文件夹,例如time_data,然后有几个子文件夹bacterial_strain,最后是drug concentration,写作\"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

请问,如何更改管道流程以实现此操作?

admin 更改状态以发布 2023年5月21日
0
0 Comments

这应该可以工作:

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

0
0 Comments

你可以尝试类似这样的操作:

find . -depth -type d -name "0,5mM*" -exec mv {} 
Experiment/time_data/bacterial_strain/drug_concentration/0,7mM \;

值得注意的事项:

  1. 我注意到你的最后一个子文件夹名称包含空格0,5 mM。对于带有空格的find命令和使用-exec mv命令的执行无效,我不确定是为什么。为了测试目的,我删除了空格字符,上面的命令有效,并且它是一条单行命令,我只是为了可见性而将其分开,我相信这将被找出来,但尽管如此;)。
  2. 我使用了整个路径来重命名最后一个文件0,5mM。我假设所有的目录深度都相同,如果不是,则可能需要进一步探索-depth选项。
  3. 如果您有不同深度的目录或不同的名称需要重命名,则还可以将上述命令封装在脚本中,并在父目录上运行它。

希望这对你有用。

0