Att ta bort filer baserat på en lista

Jag kom i en situation där jag av misstag hade massa filer som installerats utanför RPM-databasen på linuxsystemet. Dessa ville jag rensa bort från disken. Olyckligtvis låg dessa filer tillsammans med andra filer som jag ville behålla. Detta hanterade jag på följande vis.

För att få ut listan med filerna utanför rpm-databasen kördes:

comm -13 <(rpm -qla | sort) <(find /path/to/tree -type f | sort) < files.txt

Detta lade listan i filen files.txt , som används för att kunna radera dessa filer.

Att enbart radera filer från listan är inte så svårt. Det låter sig göras med

xargs -a files.txt

Problemet visade sig vara att detta inte raderar de tomma katalogerna som filerna kan lämna efter sig. Dessutom gillar jag inte att radera alla dessa filer i ett svep. Jo, det var ju det jag ville, men tänk om det är någon nödvändig fil som har slunkit med där… Det blir en eventuell jobbig felsökning efteråt i så fall.

Här kom paketeringsprogrammet tar till undsättning, detta inspirerat av denna tråd.

tar cvfz failed_files.tgz --remove-files -T files.txt

Nu fick jag alltså filerna paketerade i arkivet failed_files.tgz ,samtidigt som de raderades från platsen. På så sätt håller jag dem i ett sorts karantän, med sökväg bevarad i arkivet. Ett mycket smidigt sätt att hantera de 562 filerna som av misstag slunkit in i en befintlig katalog.