【问题标题】:Move content of each directory to a new subdirectory将每个目录的内容移动到新的子目录
【发布时间】:2015-09-12 19:32:00
【问题描述】:

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

以图形方式,我想要这个:

Directory
> Subfolder1
> > Files1
> Subfolder2
> > Files2

变成这样:

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

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

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

【问题讨论】:

  • 我投票结束这个问题作为离题,因为它要求一般的 ubuntu/linux 帮助。试试 askubuntu.com
  • 也可以是linux 的问题,ubuntu 没有具体说明。
  • 抱歉,有没有办法删除 Ubuntu 标签?如果没有,我将删除它。

标签: linux linux bash shell command-line terminal


【解决方案1】:

执行以下 命令:

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 1Directory 中查找目录,但不要下降到子目录中。
  • -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

【讨论】:

  • 感谢您的回复!但不幸的是,我收到以下错误:“ find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth 影响在它之前指定的测试以及在它之后指定的测试) 。请在其他参数之前指定选项。查找:`-exec' 缺少参数"
  • 是的,我太仓促了。请立即尝试。
  • 我仍然收到同样的错误,还有一个关于 -mindepth 的错误,还有以下内容:mv: inter-device move failed: './dir/sub1' to '/tmp/.old. 0/sub1';无法删除目标:是目录
  • 值得注意的是,该目录位于辅助硬盘驱动器上,尽管我们关注的所有文件夹都在同一个驱动器上。
  • 哈哈,现在它删除了子文件夹中的所有内容。还好我先复制了一份。
猜你喜欢
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 2018-09-23
  • 2020-05-01
  • 2011-07-07
  • 2021-08-08
  • 1970-01-01
  • 2013-03-28
相关资源
最近更新 更多