У меня есть 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