将每个目录的内容移动到一个新的子目录

Move content of each directory to a new subdirectory

我有一个包含大量文件夹的目录,每个文件夹都有不同的内容。对于其中的每一个文件夹,我都需要在其中创建一个名为 old.0 的子文件夹,并将该文件夹的所有内容复制到新的子文件夹中。

在图形上,我想要这个:

Directory
> Subfolder1
> > Files1
> Subfolder2
> > Files2

变成这样:

Directory
> Subfolder1
> > old.0
> > > Files1
> Subfolder2
> > old.0
> > > Files2

是否有一个简单的(命令行)解决方案,或者我最好手动浏览每个文件夹?

我绝对不是 专家,因此非常感谢逐步解决方案。

执行以下 命令:

find Directory -maxdepth 1 -mindepth 1 -type d  -exec bash -c ' mv "[=10=]" "old.0" && mkdir "[=10=]" && mv "old.0" "[=10=]"' {} \;

解释:

  • find Directory -type d -maxdepth 1 -mindepth 1Directory 中查找目录,但不要在子目录中查找。
  • -exec 为每个目录执行以下命令(目录名称存储在 {} 中并作为参数提供给 bash -c)。
  • mv "[=17=]" "old.0 将找到的目录放入临时目录(重命名)。
  • && mkdir "[=18=]" 如果移动成功,使用旧目录名称创建新目录。
  • && mv "old.0" "[=19=]" 并将新目录移动到具有原始名称的新目录。

用法示例:

$ mkdir test && cd test
$ ls
$ mkdir a b c && touch a/a b/b c/c
$ ls */*
a/a  b/b  c/c
$ find . -maxdepth 1 -mindepth 1 -type d  -exec bash -c ' mv "[=11=]" "old.0" && mkdir "[=11=]" && mv "old.0" "[=11=]"' {} \;
$ ls */*/*
a/old.0/a  b/old.0/b  c/old.0/c