PRETEXT
Důvod proč chci z md5sums extrahovat jen informace o .xml je, že další soubory jako dokumentace .gz a obrázky .png apod. by bylo hodně souborů a celá akce obnovení souborů by trvala velmi dlouho. Příkaz dpkg -S je pomalý i na ssd.
První pokus je opravdu velmi pomalý, takže posledním dotazem žádám LLamu o skript, kde se zpracuje více souborů najednou.
POPIS PROBLÉMU
Dobře mám soubory, nyní ale nevím k jakým balíčkům ty scházející .xml soubory patří.
Co jsem provedl - popis:
md5sums: debsums -c -g 2>&1 > missing-configs.log
vytvoří md5sums
Parametr -g způsobí, že debsums vytvoří soubor s kontrolními součty, ale neukládá jej do standardního výstupu. Místo toho se soubor s kontrolními součty uloží do adresáře /var/lib/dpkg/info/ s názvem md5sums
Poté co jsou md5sums k balíčkům hotovy provedeme extrakci řádků kde schází "OK" (grep -v čili "negativ") a extrakci souborů .xml -> výpis scházejících souborů .xml:
grep -v "OK" /var/lib/dpkg/info/*.md5sums | grep "\.xml$" | awk '{print $2}'
Llama 3.1 70B
Nyní máte seznam scházejících souborů XML, ale nevíte, k jakým balíčkům patří. To je problém, protože soubory md5sums jsou uloženy v adresáři /var/lib/dpkg/info/
s názvem md5sums, ale neobsahují informace o balíčku, ke kterému patří.
Jedním ze způsobů, jak získat informace o balíčku, ke kterému patří soubor, je použít příkaz dpkg -S
. Tento příkaz hledá soubor v databázi balíčků a vrátí název balíčku, ke kterému patří.
Můžete použít následující příkaz k získání informací o balíčku, ke kterému patří každý soubor:
grep -v "OK" /var/lib/dpkg/info/*.md5sums | grep "\.xml$" | awk '{print $2}' | xargs -I {} dpkg -S {}
Tento příkaz provede následující kroky:
- Extrahuje řádky, které neobsahují "OK" a obsahují řetězec ".xml$".
- Extrahuje název souboru z každého řádku.
- Použije příkaz
dpkg -S
k získání informací o balíčku, ke kterému patří každý soubor.
Poznámka: xargs
je příkaz, který umožňuje provést akci na každém řádku výstupu. -I {}
je parametr, který umožňuje nahradit {}
názvem souboru v příkazu dpkg -S
.
* * *
Dobře dobře ale chtěl bych ty výsledky rovnou uložit do souboru. Takže potřebuju název souboru .xml a název balíčku. Může to klidně být oddělené mezerou ty dva sloupce.
Llama 3.1 70B
Můžete použít následující příkaz k uložení výsledků do souboru:
grep -v "OK" /var/lib/dpkg/info/*.md5sums | grep "\.xml$" | awk '{print $2}' | xargs -I {} dpkg -S {} | awk '{print $2, $1}' > missing_xml_packages.txt
Tento příkaz provede následující kroky:
- Extrahuje řádky, které neobsahují "OK" a obsahují řetězec ".xml$".
- Extrahuje název souboru z každého řádku.
- Použije příkaz
dpkg -S
k získání informací o balíčku, ke kterému patří každý soubor. - Použije příkaz
awk
k extrahování názvu balíčku a názvu souboru a uložení výsledků do souborumissing_xml_packages.txt
.
Výsledný soubor bude mít následující formát:
název_souboru.xml název_balíčku
Příklad:
yelp.appdata.xml yelp
yelp-xsl.xml yelp-xsl
zim.xml zim
Poznámka: > missing_xml_packages.txt
je parametr, který umožňuje uložit výstup do souboru missing_xml_packages.txt
.
* * *
Je možné upravit skript tak, aby se data z každého .md5sums
souboru zpracovaly najednou a dpkg -S
se zavolal jen jednou pro daný soubor.
Můžete použít následující skript:
(ZATÍM NEOTESTOVÁNO)
for file in /var/lib/dpkg/info/*.md5sums; do
soubory=$(grep -v "OK" "$file" | grep "\.xml$" | awk '{print $2}')
dpkg -S $soubory | awk '{print $2, $1}' >> missing_xml_packages_2.txt
done
Žádné komentáře:
Okomentovat