Terminal 如何在Unix终端中重命名所有子文件夹中的多个目录
我有一个名为“实验”的主目录,其中我保存了几个子文件夹,比如“时间数据”,然后是几个子文件夹“细菌菌株”,最后是“药物浓度”,写得像“0,5mm”。因此,最终的路径是: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/" 或 但终端也犯了同样的错误
/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