将子文件夹重命名为父文件夹,删除“额外”文件夹

得到这个问题时,我搞砸了一个rsync,忘了添加一个尾部的斜线。

所以现在我有一个额外的文件夹。

当前foldertree

/Volumes/hd/images1/images1/ /Volumes/hd/images2/images2/ /Volumes/hd/images3/images3/ 

我想得到这个

 /Volumes/hd/images1/ /Volumes/hd/images2/ /Volumes/hd/images3/ 

有没有办法摆脱多余的文件夹来得到我想要的,我试图

 mv /Volumes/hd/images1/images1/ /Volumes/hd/images1/ 

但有一个错误说,他们是相同的,我也尝试了一些基本的PHP脚本来为我做这项工作,没有任何运气。

我无法删除或真正复制文件夹的内容,因为它的海量数据,我可以通过更改父文件夹的名称手动执行,然后将子文件夹拖到/ hd,然后删除旧的父。 但是,它的很多工作,所以如果有人知道如何做到这一点,我会非常高兴。

我使用Mac OS X,如果它的任何利益

你应该学习如何使用shell命令,可能类似于

  for f in /volumes/hd/* ; do b=$(basename $f) d=$(dirname $f) mv $f $d/$b.dir mv $d/$b.dir/* $f done 

首先检查它是否通过使用echo mv替换mv达到目的

你真的应该学习如何在MacOSX上使用基本的Unix命令(在一个终端内)

我想你最后的想法是去的:

更改父文件夹的名称,然后将子文件夹拖到/ hd,然后删除旧的父文件夹

但不要手动。 你可以写一个shell脚本来完成这个工作。 伪代码:

 for parent in `ls /Volumes/hd/` do exec 'mv ' + parent + ' ' + parent + '.old' exec 'mv ' + parent + '.old/' + parent + ' ' + '/Volumes/hd/' exec 'rmdir ' + parent + '.old end