Назад | Перейти на главную страницу

Переименовать каталог, содержащий много файлов

Я сделал ошибку в 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:

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

Это сработало в моем тесте с указанными вами путями:

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

Что происходит, вы пытаетесь переместить каталог поверх существующего каталога - и ему это не нравится, потому что в каталоге есть что-то. Переименовав сначала 2012, вы можете без проблем переместить его.

Я могу думать по крайней мере двумя способами:

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

Первый метод, вероятно, лучший ответ на ваш вопрос.