Назад | Перейти на главную страницу

скрипт - извлечь несколько файлов

У меня есть 30 таких файлов tgz:

live-3.0.10-20101031.tgz
live-3.0.4-20101005.tgz

когда я извлечу их, он будет извлечен в «живую» папку. (например: tar xvzf live-3.0.10-20101031.tgz будет извлечен в «живую» папку. Я хотел бы иметь небольшой скрипт, который будет извлекать все файлы из от самой старой к самой новой в "живой" папке. Я хочу, чтобы новые файлы копировались поверх старых файлов, это то, что я сделал, но я не могу, если все в порядке ... не могли бы вы сообщить мне, что вы думаете?

#!/bin/bash 
for f in live*.tgz; do
    echo $f
    tar xzvf $f &
done

Не тестировал, форма памяти:

ls -1rt live*tgz | xargs tar xvf

Пояснение:

  • ls -1 -> список файлов в одном столбце
  • ls -t -> список файлов на основе времени модификации (лучший подход ко времени создания)
  • ls -r -> список в обратном порядке (сначала старые)

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

HTH

Попробуйте это, вам не хватает; чтобы разделить обе команды. Так же & вероятно, не нужен, вы можете использовать его для распараллеливания tar вызовы, но, скорее всего, это принесет больше вреда, чем пользы, если у вас больше пары файлов (они будут конкурировать за ввод-вывод и процессор).

Для правильной сортировки списка файлов вы можете использовать sort -V, который сортирует по номерам версий ( * подстановочный знак на bash или plain sort будет перечислять версию 10 перед версией 4, как 1 <4). Это должно работать:

for f in `ls live*.tgz | sort -V`; do echo $f; tar xzvf $f; done