如何在 Unix 终端中重命名所有子文件夹中的多个目录
How to rename several directories in all subfolders In Unix terminal
我有一个名为“Experiment”的主目录,其中我保留了几个子文件夹,如“time_data”,然后几个子文件夹“bacterial_strain"and in the end "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
请帮帮我,如何更改管道才能做到这一点?
您可以尝试这样的操作:
find . -depth -type d -name "0,5mM*" -exec mv {}
Experiment/time_data/bacterial_strain/drug_concentration/0,7mM \;
注意事项:
- 我注意到您的最后一个子文件夹名称包含 space
0,5 mM
。使用 space 的 find
命令和使用 space 执行 -exec mv
对我不起作用。我不确定为什么。出于测试目的,我删除了 space 字符并且上面的命令有效,它也是一个类似的命令,我只是为了可见性而将其分开,我相信这会被弄清楚,但是 ;).
- 我已经用整个路径重命名了最后一个文件
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 if [ -d "$f" ]; then nf=$(dirname "$f")/0,7\ mM; mv "$f" "$nf"; fi; done
Here您可以找到其他方法。
我有一个名为“Experiment”的主目录,其中我保留了几个子文件夹,如“time_data”,然后几个子文件夹“bacterial_strain"and in the end "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
请帮帮我,如何更改管道才能做到这一点?
您可以尝试这样的操作:
find . -depth -type d -name "0,5mM*" -exec mv {}
Experiment/time_data/bacterial_strain/drug_concentration/0,7mM \;
注意事项:
- 我注意到您的最后一个子文件夹名称包含 space
0,5 mM
。使用 space 的find
命令和使用 space 执行-exec mv
对我不起作用。我不确定为什么。出于测试目的,我删除了 space 字符并且上面的命令有效,它也是一个类似的命令,我只是为了可见性而将其分开,我相信这会被弄清楚,但是 ;). - 我已经用整个路径重命名了最后一个文件
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 if [ -d "$f" ]; then nf=$(dirname "$f")/0,7\ mM; mv "$f" "$nf"; fi; done
Here您可以找到其他方法。