Скажем, после 1-го запуска было создано 10 файлов с идентификатором пользователя def в каталоге abc . Я скопировал 10 файлов, созданных с помощью идентификатора пользователя def в файле tar с расширением даты и времени.

Теперь после 2-го запуска еще 4 файла были созданы с помощью идентификатора пользователя def в списке в каталоге abc .

Теперь, когда я выполняю tar во второй раз, я не хочу, чтобы первые 10 файлов были восстановлены снова, я просто хочу tar вновь добавленные 4 файла.

В каталоге abc должно быть 2 tar-файла.

При третьем запуске третий файл tar должен содержать только новые добавленные файлы после второго запуска.

Как я могу это сделать?

1 ответ1

0

простой (ish) способ сделать это требует, чтобы у вас был начальный сторожевой файл или существующий архив в вашем каталоге tarball. по сути, это просто устанавливает время начала в качестве основы наших операций tarball:

touch sentinel.tar

Затем, чтобы упаковать файлы, которые вы ищете, просто запустите это в базовом каталоге вашего дерева каталогов:

find . -type f -newer $( ls -1rt *.tar | tail -1 )  \! -name '*.tar' -exec tar cavf "$( date '+%Y%m%d%H%M%S').tar" {} +

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

пример:

helter@helter-desktop:~/workspace/tmp$ touch sentinel.tar
helter@helter-desktop:~/workspace/tmp$ ls -la
total 12
drwxr-xr-x  3 helter helter 4096 2011-07-12 16:18 .
drwxr-xr-x 33 helter helter 4096 2011-07-12 15:52 ..
drwxr-xr-x  2 helter helter 4096 2011-07-12 16:17 abc
-rw-r--r--  1 helter helter    0 2011-07-12 16:18 sentinel.tar

helter@helter-desktop:~/workspace/tmp$ # create some files in the abc sub dir

helter@helter-desktop:~/workspace/tmp$ touch abc/1 abc/2 abc/3

helter@helter-desktop:~/workspace/tmp$ # now tar all the files that were created after our sentinal

helter@helter-desktop:~/workspace/tmp$ find . -type f -newer $( ls -1rt *.tar | tail -1)  \! -name '*.tar' -exec tar cavf "$( date '+%Y%m%d%H%M%S').tar" {} +
./abc/3
./abc/1
./abc/2

helter@helter-desktop:~/workspace/tmp$ ls -la
total 16
drwxr-xr-x  3 helter helter 4096 2011-07-12 16:18 .
drwxr-xr-x 33 helter helter 4096 2011-07-12 15:52 ..
-rw-r--r--  1 helter helter  143 2011-07-12 16:18 20110712161854.tar
drwxr-xr-x  2 helter helter 4096 2011-07-12 16:18 abc
-rw-r--r--  1 helter helter    0 2011-07-12 16:18 sentinel.tar

helter@helter-desktop:~/workspace/tmp$ # now create some more files

helter@helter-desktop:~/workspace/tmp$ touch abc/4 abc/5 abc/6

helter@helter-desktop:~/workspace/tmp$ # and re-run the command to tar up all the new files

helter@helter-desktop:~/workspace/tmp$ find . -type f -newer $( ls -1rt *.tar | tail -1)  \! -name '*.tar' -exec tar cavf "$( date '+%Y%m%d%H%M%S').tar" {} +
./abc/6
./abc/4
./abc/5

helter@helter-desktop:~/workspace/tmp$ ls -la
total 20
drwxr-xr-x  3 helter helter 4096 2011-07-12 16:19 .
drwxr-xr-x 33 helter helter 4096 2011-07-12 15:52 ..
-rw-r--r--  1 helter helter  143 2011-07-12 16:18 20110712161854.tar
-rw-r--r--  1 helter helter  142 2011-07-12 16:19 20110712161930.tar
drwxr-xr-x  2 helter helter 4096 2011-07-12 16:19 abc
-rw-r--r--  1 helter helter    0 2011-07-12 16:18 sentinel.tar

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

Вы можете обойти эти ограничения / допущения с помощью простого сценария bash, если вам не нравится идея сторожевого файла ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .