find dir1 dir2 překryv výsledků

find dir1 dir2 překryv výsledků
« kdy: 06. 03. 2024, 10:06:10 »
Jde u příkazu find při použití víc starging pointů (ano, man jsem četl, uniq obsahuje jen jednou v jiné souvislosti)  nastavit, aby to každý soubor vypisovalo jen jednou?
(neopravitelná) Příčina je, že jednotlivé starting pointy nejsou disjunktní kvůli  symlinku a nebo kvůli tomu, že jeden z nich je nadřazený adresář, ale s by se mi blbě něco dělalo ,nějak testovat mezi sebou n*(n-1), jestli vůči sobě nejsou ve vztahu , to by to zkomplikovalo

Něco jako -samefile vůči všem výsledkům
V omezených případech a spíš jen jako  nástřel to jde řešit přes find ... | sed "s/..\//g |sort  | uniq" a to jen pro symlinky

Nebo existuje nějaký příkaz funiq ?


Re:find dir1 dir2 překryv výsledků
« Odpověď #1 kdy: 06. 03. 2024, 10:43:35 »
Z dotazu není úplně zřejmé co má být výsledkem a zda se mají porovnávat jen názvy souborů nebo i obsah, ale pro tahle různá porovnávání dvou adresářů a hledání duplicit nebo unikátních používám tyhle metody, třeba tě něco nasměruje.

1) find, sed, uniq, sort
Spíš pro jednoduchý a rychlý věci, ale už jsi zkoušel a moc ti nepomohlo.

2) fdupes nebo jdupes
Umí hledat duplicitní soubory na základě obsahu. jdupes je fork fdupes a umí toho víc, vč. třeba i výstupu jen unikátních souborů

3) rsync -av --dry-run --delete dir1/ dir2/
Ukáže jaké soubory se přepíšou, protože jsou jiný a jaké to smaže, protože v dir1/ nejsou a v dir2/ jsou.