Linux'ta bir dosya listesi nasıl sıkıştırılır


18

Tek bir dizine sıkıştırmam gereken birçok dosyam var. Dizindeki tüm dosyaları sıkıştırmak istemiyorum, ancak yalnızca belirli bir sorguyla eşleşen dosyaları sıkıştırmak istiyorum.

yaptım

grep abc file-* > out.txt 

her dosyadaki tüm "abc" örneklerini içeren bir dosya oluşturmak için. Dosyalara ihtiyacım var. Bash'a yalnızca bu dosyaları sıkıştırmasını nasıl söyleyebilirim?


Joker karakterler çalışmıyor? Neden? Eğer sorabilir miyim ...
jherran

@jherran Dizindeki tüm dosyaları sıkıştırmak istemiyorum, sadece belirli bir sorguyla eşleşen dosyaları. Ben her dosya "abc" grep abc file-* > out.txttüm örnekleri ile bir dosya yapmak yaptım . Dosyalara ihtiyacım var.
john mangual

@Jherran'ın anlamı, zip ZipFile.zip file-*bunu yapmanın bariz yolu budur. Ara dosyaya, yalnızca findfarklı aramalardan gelen dosya listelerinin karmaşık veya birleştirilmiş bir sürümünü kullanıyorsanız ihtiyacınız olacaktır .
AFH

Yanıtlar:


33

Çok basit:

zip archive -@ < out.txt

Diğer bir deyişle, out.txtdosyanız satır başına bir dosya adı içeriyorsa. Tüm dosyaları out.txtdenilen bir arşive ekler archive.zip.

-@Opsiyon markaları zipSTDIN'den okuyun.

Geçici bir out.txtdosya oluşturmayı atlamak istiyorsanız, grepdosya adlarını yazdırmak için 's özelliğini de kullanabilirsiniz . -rözyinelemeli aramayı etkinleştirir (sizin durumunuzda gerekli olmayabilir) ve -lyalnızca dosya adlarını yazdırır:

grep -rl "abc" file-* | zip archive -@

Dosya isimlerinde boşluk olan bir liste dosyası dışında güzel çalışır. Her ikisini de `` ile kaçmayı denedim ve onlardan kaçmamayı, bir kez tırnak içinde ve bir kez dosya adı etrafında tırnaklar olmadan (bir satır - bir dosya adı). Şimdiye kadar hiçbir şey işe yaramadı.
Thomas W.

2
`` Kaçan boşluklarla ve dosyada tırnak işaretleri olmadan ve şu şekilde çalışmasını cat out.txt | while read line ; do xargs zip archive.zip $line ; done
Thomas W.

benzer adlara sahip dosyaları zip archive.zip $(ls common_name*)
ziplemek

@ chepe263 Dosyaların yollarında boşluk varsa bu kesilir. Genellikle çıktısını ayrıştırmak önerilmez.
slhck

Burada bir arama motoru indeksleme izniyle yaralanan herkes için, -@sözdizimi 10.16 itibariyle iyi çalışıyor, ancak man sayfası hala hakkında dil içeriyor olsa danot on MacOS
Aidan Miles

0

Kabul edilen cevaba alternatifler, buradan :

cat out.txt | zip -@ zipfile.zip
cat out.txt | zip -@ - > zipfile.zip
zip zipfile.zip $(cat out.txt) -r
zip zipfile.zip -r . -i@out.txt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.