将子文件夹重命名为父文件夹,删除' extra'夹

时间:2011-12-28 08:48:51

标签: linux macos bash shell rsync

当我搞砸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

2 个答案:

答案 0 :(得分:2)

你应该学习如何使用shell命令,或许类似

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

首先使用mv

替换echo mv,检查它是否符合您的要求

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

答案 1 :(得分:0)

我认为你的最后一个想法是:

  

更改父文件夹的名称,然后将子文件夹拖到/ 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