Uzak bir sistemden yerel sistemimize FTP'lenmiş olmakla meşgul büyük bir tarball var.
Ben bir seferde 50 dosya diyelim untarring başlatmak mümkün olup olmadığını bilmek istiyorum böylece aktarım sırasında bu dosyaları işlenmeye başlayabilirsiniz.
Uzak bir sistemden yerel sistemimize FTP'lenmiş olmakla meşgul büyük bir tarball var.
Ben bir seferde 50 dosya diyelim untarring başlatmak mümkün olup olmadığını bilmek istiyorum böylece aktarım sırasında bu dosyaları işlenmeye başlayabilirsiniz.
Yanıtlar:
İşte bir arşivden belirli dosyaları nasıl ayıklayabileceğinize dair ayrıntılı bir açıklama. Özellikle GNU katranı, bir tarball'dan bir veya daha fazla dosyayı ayıklamak için kullanılabilir. Belirli arşiv üyelerini çıkarmak için üye adlarını bağımsız değişken olarak belirtin.
Örneğin:
tar --extract --file={tarball.tar} {file}
Belirli bir globbing deseniyle (joker karakterler) eşleşen dosyaları da çıkarabilirsiniz. Örneğin, dizin öneki ne olursa olsun, pic ile başlayan tüm dosyaları cbz.tar dosyasından ayıklamak için şunu yazabilirsiniz:
tar -xf cbz.tar --wildcards --no-anchored 'pic*'
Tüm php dosyalarını ayıklamak için şunu girin:
tar -xf cbz.tar --wildcards --no-anchored '*.php'
Nerede,
-x
: zift'e dosyaları çıkarmasını söyler.
-f
: dosya adını / tarball adını belirtir.
-v
: Ayrıntılı (dosyaları ayıklarken ilerlemeyi göster).
-j
: arşivi bzip2 ile filtreleyin, .bz2 dosyalarını açmak için kullanın.
-z
: arşivi gzip ile filtreleyin, .gz dosyalarını açmak için kullanın.
--wildcards
: katran'a komut satırı argümanlarını globbing kalıpları olarak ele alma talimatı verir.
--no-anchored
: kalıpların herhangi bir / sınırlayıcıdan sonra üye adlarına uygulandığını bildirir.
-t
tamamen indirilene kadar listedeki (mevcut) son dosyayı ayıklamaktan kaçınmak iyi bir fikir olacaktır . Herhangi bir zamanda, liste yalnızca aktarılan veya aktarılan dosya adlarını gösterir. tam liste değil ; tamamen indirilene kadar.
Bunu kendim denemedim, ama buna ne dersin:
tar xvf archive.tar | head -n50
Tar, çıkarılan her dosya için STDOUT'a bir satır verir, ardından head
komut 50 satırdan sonra boruyu öldürür. Borunun ölmesi üzerine katranın da ölmesini beklerdim.
head
. Cevabımı değiştireyim.
tar
SIGPIPEd olmadan önce 50'den fazla dosya ayıklayabileceğinden ve özellikle de son, eksik dosyayı ayıklayabileceğinden korkuyorum.
tar -tvf tarfile.tar
içindeki dosyaların tüm listesini verir tarfile.tar
tar -xvf tarfile.tar fileToRestore
Bu komut fileToRestore
Birden çok dosyanın yıldız işaretini kaldırmak, ancak hepsinin değil:
Sen tüm dosya listesini hazırladık tarfile.tar
içinetar.txt
tar -tvf tarfile.tar > tar.txt
Şimdi tar.txt
tüm dosyaların listesi var tarfile.tar
ve sadece geri yüklemek istediğiniz dosyaları veya kafa ile bırakabilirsiniz ...
head -n50 tar.txt > tar2.txt
Bu satırları bir dosyaya koyabilirsiniz
cat tar.txt|while read line
do
tar -xvf tarfile.tar ${line}
done
Veya tam komut dosyası:
#!/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 ""
Ve hepsi bu