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

Linux 将每个目录的内容移动到新的子目录,linux,bash,shell,command-line,terminal,find,Linux,Bash,Shell,Command Line,Terminal,Find,我有一个包含大量文件夹的目录,每个文件夹都有不同的内容。对于每个文件夹,我需要在其中创建一个子文件夹,名称为old.0,并将文件夹的所有内容复制到新的子文件夹中 从图形上看,我希望: Directory > Subfolder1 > > Files1 > Subfolder2 > > Files2 为此: Directory > Subfolder1 > > old.0 > > > Files1 > Subfolde

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

从图形上看,我希望:

Directory
> Subfolder1
> > Files1
> Subfolder2
> > Files2
为此:

Directory
> Subfolder1
> > old.0
> > > Files1
> Subfolder2
> > old.0
> > > Files2
是否有一个简单的(命令行)解决方案,或者我最好手动查看每个文件夹

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

执行以下命令:

说明:

  • find Directory-type d-maxdepth 1-mindepth 1
    Directory
    中查找目录,但不要在子目录中下降
  • -exec
    对于每个dir执行以下命令(dir的名称存储在
    {}
    中,并作为参数提供给
    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

我将投票结束这个问题,因为它需要ubuntu/linux的一般帮助。请尝试askubuntu.com。这个问题很简单,没有什么特别的。很抱歉,有没有办法删除ubuntu标签?如果没有,我将删除它。感谢您的回复!但不幸的是,我收到了以下错误:“查找:警告:您在非选项参数-type之后指定了-maxdepth选项,但选项不是位置性的(-maxdepth影响在它之前指定的测试以及在它之后指定的测试)。请在其他参数之前指定选项。查找:“-exec”缺少参数“是的,我太匆忙了。请现在重试。我仍然收到相同的错误,还有一个关于-mindepth的错误,还有以下错误:mv:inter-device move failed:“./dir/sub1”到“/tmp/.old.0/sub1”;无法删除目标:是目录可能值得注意的是,该目录位于辅助硬盘上,尽管我们关心的所有文件夹都位于同一个驱动器上。哈哈,现在它删除了子文件夹中的所有内容。幸好我先复印了一份。
$ 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