2011-12-28 3 views
2

получил эту проблему, когда я испортил rsync и забыл добавить трейлинг-косую черту.переименовать подпапку в родительскую папку, удалить папку «extra»

Итак, теперь у меня есть дополнительная папка.

Текущий 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, чтобы выполнить эту работу для меня, witho нет никакой удачи.

Я не могу удалить или действительно скопировать содержимое папок с огромного количества данных, я мог бы сделать это вручную, изменив имя родительской папки, а затем перетащить подкаталог в/hd, а затем удалить старый родитель , Но его много работы, поэтому, если бы кто-нибудь получил подсказку о том, как это сделать, я был бы более чем счастлив.

Im, используя Mac OS X, если ее какой-либо интерес

ответ

2

Вы должны научиться использовать команды оболочки, возможно, что-то вроде

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

Вы действительно должны научиться использовать базовые команды Unix (внутри терминала) на вашем MacOSX

+0

Спасибо, я знаю, его в списке дел. плохо попробуйте это! – Patrick

+0

Сохраненный мой день. еще раз спасибо – Patrick

0

Я думаю, что ваша последняя идея является один идти:

изменение названия родительской папки, а затем перетащить папку в/HD, а затем удалить старый родителю

Но не делать это вручную. Вы можете написать сценарий оболочки для выполнения работы. Псевдокод:

for parent in `ls /Volumes/hd/` do 
    exec 'mv ' + parent + ' ' + parent + '.old' 
    exec 'mv ' + parent + '.old/' + parent + ' ' + '/Volumes/hd/' 
    exec 'rmdir ' + parent + '.old 
end 
Смежные вопросы