重命名包含许多文件的目录

我在一个rsync犯了一个错误,所有的文件都被完整的path复制。 所有我复制的文件都在

 /var/www/photos/2012/1007/1007 

尝试1

现在我想通过这样做来修复path

  mv /var/www/photos/2012/1007/1007 /var/www/photos/2012 

这给出了错误:

 mv: cannot move `/var/www/photos/2012/1007/1007' to `/var/www/photos/2012/1007': Directory not empty 

尝试2

  mv /var/www/photos/2012/1007/1007/* /var/www/photos/2012/1007 

我得到的错误:

 -bash: /bin/mv: Argument list too long 

问题:重命名包含大量文件的文件夹的正确方法是什么?


这些文件实际上被复制到/var/www/photos/2012/1007/home/photos/public_html/2012/1007但不知何故,我把它们到/var/www/photos/2012/1007/1007

Rsync cmd:

rsync -zavrR --rsh="ssh -c arcfour -l root -p 2200" www.mydomain.com:/home/photos/public_html/2012/1007 /var/www/photos/2012/1007

这与我给你的pathtesting:

 cd /var/www/photos mv 2012 old mv old/1007/1007 . mv 1007 2012 

发生什么事是你正试图将一个目录移到一个已经存在的目录的顶部 – 而且它不喜欢这样做,因为目录中有东西。 通过首先重命名2012年,您可以移动它没有问题。

至less有两种我能想到的方式:

1:首先将/ var / www / photos / 2012/1007重命名为/ var / www / photos / 2012 / temppath,然后将mv / var / www / photos / 2012 / temppath / 1007 – > / var / www / photos / 2012 /,然后rmdir / var / www / photos / 2012 / temppath。

2:使用一个简单的脚本来移动内容:

 for f in `find /var/www/photos/2012/1007/1007 -mindepth 1`; do mv $f /var/www/photos/2012/1007/1007/../; done 

第一种方法可能是更好的回答你的问题。