重命名目录及其子目录而不影响其文件

重命名目录及其子目录而不影响其文件

我必须使用前缀“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

相关内容