如何将文件向下移动到目录?

如何将文件向下移动到目录?

我继承了一个项目的文件夹结构,想稍微简化一下。我的根目录下有很多文件夹(第 1 级),每个文件夹中都有许多文件夹(第 2 级),每个文件夹中都有一些文件。它看起来像这样:

root
|-- dir1
|    |-- dir1.1
|    |      +- file1.txt
|    |-- dir1.2
|    |     +- file2.txt
|    +-- dir1.N
|          +- fileN.txt
|-- dir2
|    |-- dir2.1
|          +- file3.txt
|-- dir3
|    |-- dir3.1
|          +- file4.txt

ETC。

我想删除所有 x.1 文件夹,简化结构,并将这些文件夹中的所有文件向下移动一级:

root
|-- dir1
|     +- file1.txt
|     +- file2.txt
|     +- fileN.txt
|-- dir2
|     +- file3.txt
|-- dir3
|     +- file4.txt

我该如何通过 bash/zsh 完成这样的事情?

答案1

我不知道这是否会在 zsh 中起作用,但我希望它会在 bash 中起作用(尽管我还没有完全测试过它):

对于 f 在 */*/*
        mv "$f" "$(目录名 "$(目录名 "$f")")"
完毕

对于 f 在 */*
        如果 [ –d "$f" ]
        然后
                删除目录“$f”
完毕

PS 在 Unix 中(与植物学不同,即现实世界),树的根在顶部。因此,此操作将被视为移动文件向上目录结构。

答案2

for d in */*; do
    mv "$d"/* "$d"/..
    rm -r "$d"
done

如果第二级包含空目录或文件,则此方法不起作用。

相关内容