В терминале объединение нескольких папок в одну - PullRequest
3 голосов
/ 26 апреля 2010

У меня есть каталог резервного копирования, созданный WDBackup (западная цифровая внешняя утилита резервного копирования HD), который содержит каталог для каждого дня, когда он создавал резервную копию, и инкрементное содержимое только того, что было скопировано.

Итак, иерархия выглядит следующим образом:

20100101
  My Documents
    Letter1.doc
  My Music
    Best Songs Every
      First Songs.mp3
    My song.mp3 # modified 20100101
20100102
  My Documents
    Important Docs
      Taxes.doc
  My Music
    My Song.mp3 # modified 20100102

...etc...

Выполняется резервное копирование только того, что изменилось, и первое из созданных резервных копий содержит все файлы, выбранные для резервного копирования.

Сейчас я пытаюсь постепенно копировать, сохраняя структуру папок, от самой старой до самой новой, каждую из этих устаревших папок в «объединенной» папке, чтобы она перезаписывала старое содержимое и сохраняла новый материал.

Например, если использовать только эти две папки, конечная объединенная папка будет выглядеть следующим образом:

Merged
  My Documents
    Important Docs
      Taxes.doc
    Letter1.doc
  My Music
    Best Songs Every
      First Songs.mp3
    My Song.mp3 # modified 20100102

Надеюсь, это имеет смысл.

Спасибо

Josh

Ответы [ 2 ]

6 голосов
/ 26 апреля 2010

Вы можете использовать rsync в цикле bash for, например ::10000

$ for d in 2010* ; do rsync -av ./$d/ ./Merged/ ; done

Обратите внимание, что перед тем, как запустить это по-настоящему, вы можете просто быть осторожными и проверить, что он действительно будет делать то, что вы хотите - для этого вы можете использовать флаг -n rsync, чтобы выполнить "пробный запуск":

$ for d in 2010* ; do rsync -avn ./$d/ ./Merged/ ; done
1 голос
/ 26 апреля 2010

Если имена каталогов на самом деле в форме ГГГГММДД, вы можете просто отсортировать их. Так что это просто вопрос обхода их по одному, начиная со старого и копируя все в место назначения, перезаписывая предыдущий материал. Довольно неэффективно, но работает.

cd $my_disk_full_of_backups
for x in (ls | sort); do cp -Rf $x/* /my_destination/; done

Ужасно, но также должно быть достаточно переносимым почти на каждой Unix-системе, которая имеет bash.

Подробнее см. Bash (1), ls (1) и sort (1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...