У меня есть большой архив, который занят передачей по FTP от удаленной системы к нашей локальной системе.
Я хочу знать, возможно ли начать распаковку, скажем, 50 файлов за раз, чтобы эти файлы могли начать обрабатываться во время передачи.
У меня есть большой архив, который занят передачей по FTP от удаленной системы к нашей локальной системе.
Я хочу знать, возможно ли начать распаковку, скажем, 50 файлов за раз, чтобы эти файлы могли начать обрабатываться во время передачи.
Ответы:
Вот подробное объяснение того, как можно извлечь определенные файлы из архива. В частности, GNU tar может использоваться для извлечения одного или нескольких файлов из tarball. Чтобы извлечь конкретные члены архива, укажите их точные имена в качестве аргументов.
Например:
tar --extract --file={tarball.tar} {file}
Вы также можете извлечь те файлы, которые соответствуют определенному шаблону глобализации (групповые символы). Например, чтобы извлечь из cbz.tar все файлы, начинающиеся с pic, независимо от их префикса каталога, вы можете набрать:
tar -xf cbz.tar --wildcards --no-anchored 'pic*'
Чтобы извлечь все файлы php, введите:
tar -xf cbz.tar --wildcards --no-anchored '*.php'
Где,
-x
: инструктирует tar для извлечения файлов.
-f
: указывает имя файла / имя тарбола.
-v
: Подробный (показать прогресс при извлечении файлов).
-j
: фильтровать архив через bzip2, использовать для распаковки файлов .bz2.
-z
: фильтровать архив через gzip, использовать для распаковки .gz файлов.
--wildcards
: инструктирует tar обрабатывать аргументы командной строки как шаблоны-заглушки.
--no-anchored
: сообщает, что шаблоны применяются к именам элементов после любого / разделителя.
-t
списке до полной загрузки архива. В любой момент времени в списке отображаются только те имена файлов, которые были или были переданы, т.е. не полный список; пока он не будет полностью загружен.
Сам не пробовал, но как на счет этого:
tar xvf archive.tar | head -n50
Tar выводит строку в STDOUT для каждого извлеченного файла, затем head
команда уничтожит канал после 50 строк. После того, как труба умирает, я ожидаю, что смола тоже умрет.
head
. Позвольте мне изменить свой ответ.
tar
может извлечь более 50 файлов до его SIGPIPEd, и, в частности, он может извлечь последний, неполный файл.
tar -tvf tarfile.tar
дает вам полный список файлов в tarfile.tar
tar -xvf tarfile.tar fileToRestore
Эта команда восстанавливает fileToRestore
Распаковать несколько файлов, но не все, вы можете:
Вы кладете весь список файлов из tarfile.tar
вtar.txt
tar -tvf tarfile.tar > tar.txt
Теперь tar.txt
есть весь список файлов, tarfile.tar
и вы можете оставить только те файлы, которые вы хотите восстановить или с головой ...
head -n50 tar.txt > tar2.txt
Вы можете поместить эти строки в файл
cat tar.txt|while read line
do
tar -xvf tarfile.tar ${line}
done
Или полный файл сценария:
#!/bin/bash
if [[ "$1" = "" || "$2" = "" ]]
then
echo ""
echo "Uso: untar-list.sh tarfile.tar listfile.txt"
echo ""
exit 1
fi
tarfile=$1
file=$2
if [[ ! -f ${tarfile} ]]
then
echo ""
echo "Archivo ${tarfile} no existe"
echo ""
exit 1
fi
if [[ ! -f ${file} ]]
then
echo ""
echo "Archivo ${file} no existe"
echo ""
exit 1
fi
cat ${file}|while read line
do
tar -xvf ${tarfile} ${line}
done
echo ""
echo "Finalizado"
echo ""
И это все