Я могу автоматизировать multi-volume-feature tar?

find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;

Вы отчасти обменялись аргументами в пользу mv

8
25.09.2011, 00:28
2 ответа

Вот решение:

printf 'n file-%02d.tar\n' {2..100} | 
    tar -ML 716800 -cf file-01.tar Documents/ 2>/dev/null

где 100 число, больше или равное количеству объемов.

Править

Определение большого номера не должно быть проблемой, хотя я склонен не брать смешной.

Альтернатива могла быть "следующим объемом" сценарий, который можно установить с -F опция,

tar -ML 716800 -F './myscript file' -cf file.tar Documents/ 2>/dev/null

затем в ./myscript поместить

#!/bin/bash

prefix="$1"
n=1
while [[ -e "$prefix-$n.tar" ]]; do
  ((n++))
done
mv "$prefix.tar" "$prefix-$n.tar"
echo "$prefix-$n.tar"

Это будет выполняться в каждом конце объема и переместится file.tar к соответствующему fileNNN.tar. Для последнего объема не будет выполняться сценарий, таким образом, последнее имя тома останется file.tar.

Редактирование 2

Я закончил со следующим разработанным решением.
Вот два сценария, один для создания и другого для извлечения:

#!/bin/bash
# CREATION SCRIPT

# save on file the initial volume number
echo 1 >number

# multi-volume archive creation
tar -ML 100000 -F './tar-multi-volume-script c file' -cf file.tar Documents2/ 2>&-

# execute the "change-volume" script a last time
./tar-multi-volume-script c file

и

#!/bin/bash
# EXTRACTION SCRIPT

# save on file the initial volume number
echo 1 >number

# execute the "change-volume" script a first time
./tar-multi-volume-script x file

# multi-volume archive extraction
tar -M -F './tar-multi-volume-script x file' -xf file.tar 2>&-

# remove a spurious file
rm file.tar

где ./tar-multi-volume-script дают

#!/bin/bash
# TAR INVOKED SCRIPT

mode="$1"
prefix="$2"
n=$(<number)

case $mode in
  c) mv "$prefix.tar"    "$prefix-$n.tar" ;;
  x) cp "$prefix-$n.tar" "$prefix.tar"    ;;
esac

echo $((n+1)) >number

Очевидно, необходимо измениться на многие биты тут и там, чтобы адаптироваться к ситуации и быть уверенными, что она работала бы в cron, это всегда - немного проблемы.

14
27.01.2020, 20:10
  • 1
    мне нравится этот, но затем я должен знать макс. количество объемов на каталог в заранее? Я имею в виду, что происходит, когда я превышаю 716 м в 100 каталогах? Я могу просто установить макс. на смехотворно высокое количество как 919 191 и оставить его? –  Industrial 25.09.2011, 12:09
  • 2
    @Industrial: посмотрите, что сжатие –  enzotib 25.09.2011, 12:34
  • 3
    Большое спасибо за этот большой ответ, Enzotib! Как Вы предложили бы восстановить/извлечь использование этого сценария "следующего объема"? –  Industrial 25.09.2011, 18:31
  • 4
    @Industrial: здесь почти полное решение –  enzotib 25.09.2011, 19:30
  • 5
    Большие подходы! Благодаря всем вовлеченным. - Протест: Я вижу, что первое решение использует a bash встроенная функция назвала расширение фигурной скобки; это не может быть доступно во всех оболочках. Если Вы сталкиваетесь с сообщением об ошибке или неожиданным поведением, использовать printf 'n file-%02d.tar\n' $(seq 2 100) | (etc.) вместо этого, который должен работать где угодно. –  syntaxerror 07.11.2014, 23:40

Когда в сомнении, прочитайте руководство...

http://www.gnu.org/software/tar/manual/html_node/Multi_002dVolume-Archives.html

или просто используйте следующую строку поиска в своем любимом интернет-поисковике:

"Архивы дольше, чем Одна лента или диск"

Тот раздел руководства tar GNU предоставляет подходящий сценарий (названный новым объемом) для использования с-F опцией команды tar. Вы могли настроить тот сценарий к своему вкусу, если Вы желаете.

приятного отдыха!

0
27.01.2020, 20:10
  • 1
    Вы, кажется, забыли упоминать --new-volume-script флаг? –  SamB 19.10.2012, 05:10
  • 2
    Только отправьте ссылки; включайте некоторый контекст так, чтобы, был должен другой сайт понижаться, существует достаточная информация здесь для понимания ответа. –  jasonwryan 19.10.2012, 05:32

Теги

Похожие вопросы