将每个目录的内容移动到一个新的子目录
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
是否有一个简单的(命令行)解决方案,或者我最好手动浏览每个文件夹?
我绝对不是 linux 专家,因此非常感谢逐步解决方案。
执行以下 find 命令:
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 1
在 Directory
中查找目录,但不要在子目录中查找。
-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
我有一个包含大量文件夹的目录,每个文件夹都有不同的内容。对于其中的每一个文件夹,我都需要在其中创建一个名为 old.0
的子文件夹,并将该文件夹的所有内容复制到新的子文件夹中。
在图形上,我想要这个:
Directory
> Subfolder1
> > Files1
> Subfolder2
> > Files2
变成这样:
Directory
> Subfolder1
> > old.0
> > > Files1
> Subfolder2
> > old.0
> > > Files2
是否有一个简单的(命令行)解决方案,或者我最好手动浏览每个文件夹?
我绝对不是 linux 专家,因此非常感谢逐步解决方案。
执行以下 find 命令:
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 1
在Directory
中查找目录,但不要在子目录中查找。-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