web-dev-qa-db-ja.com

多くのファイルを含むディレクトリの名前を変更します

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

試行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

4
Nyxynyx

これは、あなたが与えたパスで私のテストで機能しました:

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

何が起こっているのかというと、既存のディレクトリの上にディレクトリを移動しようとしているのですが、ディレクトリに何かがあるので、そうするのは好きではありません。最初に2012の名前を変更することで、問題なく移動できます。

2
Grant

私が考えることができる少なくとも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

最初の方法は、おそらくあなたの質問に対するより良い答えです。

1
por