如何重命名嵌套文件夹?

如何重命名嵌套文件夹?

所以我有一堆格式为:的文件夹 .../course/year/...,我经常重新组织它们,以便格式更改为:.../year/course/...。我一直想学习如何编写 shell 脚本,而且我对自动化和 shell 脚本非常陌生,但我想制作一个脚本,当我输入要重命名的文件夹的路径时,它可以为我执行此操作。例如,我会有一个如下命令:sh reorganize.sh .../course/year/... 它会“交换”课程文件夹和年份文件夹。年文件夹内部有一些内容,交换后,年文件夹中的所有内容现在都应该位于课程文件夹中。还有多个年份文件夹,因此 2018、2019、2020 在课程文件夹内都有自己的文件夹。我感谢任何有关我如何做到这一点的帮助。

PS-当我说我相当新时,我的意思是我知道变量、管道和基本命令背后的基本知识,但除此之外没有太多知识。

答案1

#! /bin/bash

rootdir="$PWD"
shopt -s nullglob

for course in *; do
    pushd "$course" >/dev/null
    for year in *; do
        mkdir -p "${rootdir}/${year}"
        mv --no-target-directory "$year" "${rootdir}/${year}/${course}"
    done
    popd >/dev/null
    rmdir "$course"
done

在目录之间跳转时,我认为使用绝对路径 ( rootdir="$PWD") 和pushd/popd而不是更不容易出错cd。尽管这个相当简单的案例并不需要这样做。

mv --no-target-directory如果脚本运行多次(前一次运行中止),应防止出现意外影响。同样,有人可能会争辩说,在这种情况下(在文件系统内移动)危险的情况不会发生。mv根据目标目录/新路径是否存在,行为会有所不同。该选项可以防止这种情况发生。

相关内容