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

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

我在 a 中犯了一个错误rsync,所有文件都以完整路径复制。我复制的所有文件都在

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

尝试 1

现在我想修复路径,方法是

 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

第二次尝试

 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 命令:

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

答案1

在我测试的你给出的路径下,这个方法有效:

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

实际情况是,您试图将目录移到现有目录之上 - 但系统不喜欢这样做,因为目录中有内容。通过先重命名 2012,您可以毫无问题地移动它。

答案2

我能想到至少两种方法:

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

第一种方法可能能更好地回答您的问题。

相关内容