我必须使用前缀“ms_PF”重命名根目录下的目录,然后使用主目录的修改后的名称重命名它们的子目录,并添加一个额外的“_”,然后将所有目录及其子目录复制到根目录,如下所示:
root
maindir1
maindir2
subdir1
subdir2
subdir3
maindir1 和 maindir2 将使用前缀“ms_PF_”重命名并直接复制到 root,因为 maindir2 有子目录,它们将携带 maindir2 的新名称,即 ms_PF_maindir2 加上下划线 (_),然后所有子目录将被复制到 root,如下所示:
ms_PF_maindir1
ms_PF_maindir2_subdir1
ms_PF_maindir2_subdir2
ms_PF_maindir2_subdir3
非常感谢在此事上提供的帮助。我尝试的解决方案是这样的,但它实际上需要修复:
root_dir="/dwn/icbu_dwn/LL"
prefix="ms_PF_"
do_it () {
awk '{ print "mv $root_dir $prefix ${root_dir/\//_}" }' | sh
}
find "$root_dir" -depth -type d | do_it
答案1
如果只有几个目录,请手动完成(其他任何事情在编写/调试方面都会比在做时更多)。
如果它是一个较大的集合,请用于find(1)
创建受影响文件的列表,并使用您最喜欢的编辑器将其转换为执行移动的脚本。检查是否有错误,然后开火。
sed(1)
如果更大/重复,我会做与上面基本相同的事情,但是通过即时“将路径编辑为新名称” 。也许甚至直接从 调用find
。会成为一个很好的俏皮话来吓唬新手......
答案2
这将以正确的顺序进行重命名。请注意,第一个模式中的尾部斜杠将匹配范围限制为目录。
cd root
for dir in maindir*/*/ maindir*; do
echo mv $dir ms_PF_${dir/\//_}
done
输出
mv maindir2/subdir1/ ms_PF_maindir2_subdir1/
mv maindir2/subdir2/ ms_PF_maindir2_subdir2/
mv maindir2/subdir3/ ms_PF_maindir2_subdir3/
mv maindir1 ms_PF_maindir1
mv maindir2 ms_PF_maindir2