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

时间:2015-06-26 00:45:05

标签: linux bash shell command-line terminal

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

从图形上看,我想要这个:

old.0

成为这个:

Directory
> Subfolder1
> > Files1
> Subfolder2
> > Files2

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

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

1 个答案:

答案 0 :(得分:2)

执行以下命令:

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

说明:

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

使用示例:

$ 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 "$0" "old.0" && mkdir "$0" && mv "old.0" "$0"' {} \;
$ ls */*/*
a/old.0/a  b/old.0/b  c/old.0/c