переименуйте подпапку в родительскую, удалите лишнюю папку - PullRequest
2 голосов
/ 28 декабря 2011

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

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

Текущее дерево папок

/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, чтобы сделать работу для меня, без какой-либо удачи.

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

Я использую Mac OS X, если это интересно

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

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

 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 голосов
/ 28 декабря 2011

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

измените имя родительской папки, затем перетащите подпапку в / 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
...