Könyvtárdiff: csak a módosult fájlok nevei érdekelnek

Fórumok

Könyvtárdiff: csak a módosult fájlok nevei érdekelnek

Hozzászólások

Kipróbálva az összes említett megoldást, egyik sem tűnik tökéletesnek. (Nem szívózni akarok, csak nem akarok elcseszni egy egész napos melót azzal, hogy nem commitolok be mindent, amit kell.)

Legközelebb a diffstat járhat a megoldáshoz (a maga 76 módosult fájljával), a többiek közül a grep-es megoldás 73 fájlt mutat, az rsync-es pedig 66-ot (hogy ezt honnan szedi, nem tudom, de nem mutatja pl. az újonnan bekerült fájlokat) - bár ezek után nem igazán tudom, hogy melyiknek higyjek.

Hozzá kell tenni, hogy a diff-nél nem használtam az -a kapcsolót, ugyanis van jónéhány (módosult) bináris fájl is.

[quote:e7f92d1e76="algernon"][quote:e7f92d1e76="egmont"]grep '^+++' valami.patch

Ez a modosult fileokat is listazza.

Öööö... miért, nem ez volt a cél? :-)

[quote:c3217f27fa="boobaa"]az rsync-es pedig 66-ot (hogy ezt honnan szedi, nem tudom, de nem mutatja pl. az újonnan bekerült fájlokat)

Hmmm, jogos. Próbáld keresztbe: rsync kapcsolók új/ régi/, és/vagy adj neki --delete kapcsolót is. Továbbá praktikus lehet a -c opció is, egyébként az azonos méretű és időcímkéjű fájlokba nem néz bele hanem azonosnak feltételezi őket.

[quote:01a1a1c879="boobaa"]Kipróbálva az összes említett megoldást, egyik sem tűnik tökéletesnek. (Nem szívózni akarok, csak nem akarok elcseszni egy egész napos melót azzal, hogy nem commitolok be mindent, amit kell.)

Commit, friss checkout máshova, rekurzív diff, és ha van találat, akkor valamit elrontottál, commitolsz még egyet és így tovább... :-D

[quote:1ec6e23c96="egmont"]Commit, friss checkout máshova, rekurzív diff, és ha van találat, akkor valamit elrontottál, commitolsz még egyet és így tovább... :-D

Ez elég ocsmány megoldás lenne, ismerve az SVN true atomic commitját (ellentétben a CVS-sel, ugyebár)... Bár el kell ismerjem, hogy ez a "legbolodbiztosabb" megoldás... :-)

Miután egész nap diffeket bújtam és egy régebben kiadott rendszerhez írt saját változtatásokra kellett ráhegesztenem az új kiadás biztonsági hibajavításait (de csak azokat), nem találom a lényeget.

Adott három könyvtár: régi-saját, új-saját, új. Megvan a patch, ami a régi-saját könyvtárat (összes alkönyvtárában levő összes fájllal) átalakítja úgy, hogy új-saját legyen. (Az új könyvtár az új kiadást tartalmazza, amiből csak részeket kellett átvenni, tehát miután megvan a patch, ez már nem játszik.) A kérdés a következő: hogyan tudom megállapítani (akár a patch, akár a régi-saját és új-saját könyvtárak felhasználásával), hogy melyik fájlok módosultak? Egyetlen fájlnévlistára volna szükségem, ami az új-saját könyvtárban levő, a régi-sajáthoz képest módosult fájlokat tartalmazza.

(Lehet, hogy nagyon láma kérdés, de egész napos heggeszting után 3x végigbújtam a man diff-et, és nem jöttem rá.)

[quote:6268d02e57="boobaa"]A kérdés a következő: hogyan tudom megállapítani (akár a patch, akár a régi-saját és új-saját könyvtárak felhasználásával), hogy melyik fájlok módosultak? Egyetlen fájlnévlistára volna szükségem, ami az új-saját könyvtárban levő, a régi-sajáthoz képest módosult fájlokat tartalmazza.

Rossz helyen kerested, nem diff(1)-ben kellett volna, hanem diffstat(1) -ban :)
diffstat foo.patch, es voila.

[quote:4ff146305c="algernon"]Rossz helyen kerested, nem diff(1)-ben kellett volna, hanem diffstat(1) -ban :)
diffstat foo.patch, es voila.

Mondtam, hogy este van már... Köszönöm szépen! Mentségemre szóljon:
[code:1:4ff146305c]$ find régi-saját | wc -l
3274
$ find új-saját | wc -l
3284
$ find új | wc -l
2557
$ diffstat patch | wc -l
77
$[/code:1:4ff146305c]
Na erre az utolsóra voltam kíváncsi, méginkább a fájlnevekre. Ráment egy egész napom...

Patchek modositasara, meg hasonlokra ajanlom meg a patchutils nevu csomagot (abban az lsdiff az kb hasonlot csinal, mint diffstat, csak picit mas formaban, ami lehet jobban emesztheto bizonyos celokra)

Kérsz a két könyvtárról egy-egy rekurzív directory listát úgy hogy csak a név, idő, méret legyen benne (lehet hogy ehhez sed-elni kell), beleirányítod 2 fájlba és azokat diff eled...

[quote:9d8c3f15bf="mortella"]Kérsz a két könyvtárról egy-egy rekurzív directory listát úgy hogy csak a név, idő, méret legyen benne (lehet hogy ehhez sed-elni kell), beleirányítod 2 fájlba és azokat diff eled...

Ez nem mukodik akkor, ha mtime minden filenal ugyanaz (mert teszemazt ugy lett kicsomagolva, vagy atmasolva valahonnan, hogy nem orzodtek meg az eredeti timestampek).

[quote:2d2f59dbd1="algernon"]Patchek modositasara, meg hasonlokra ajanlom meg a patchutils nevu csomagot (abban az lsdiff az kb hasonlot csinal, mint diffstat, csak picit mas formaban, ami lehet jobban emesztheto bizonyos celokra)

Ennek az a baja, hogy csak unified patch-et eszik, és az új fájlok kijelzésére még mindig nem tudom rávenni...

[quote:2336a69fda="boobaa"][quote:2336a69fda="algernon"]Patchek modositasara, meg hasonlokra ajanlom meg a patchutils nevu csomagot (abban az lsdiff az kb hasonlot csinal, mint diffstat, csak picit mas formaban, ami lehet jobban emesztheto bizonyos celokra)

Ennek az a baja, hogy csak unified patch-et eszik, és az új fájlok kijelzésére még mindig nem tudom rávenni...

Hat alakitsd at a patchet! Arra is van tool patchutils-ban :)

Most nezem, hogy a diff az hulyen csinalja, es ha nincs 1/c, de van 2/c, akkor diff -urNad olyan patchet csinal, amibol az latszik hogy 1/c is volt, csak 1970-01-01 datummal. Ebben az esetben, ezt lehet csinalni:

diff -urNad 1 2 2>&1 | grep -e "^[-+]\{3\} .*1970-01-01 01:00:00.*" | sed -e "s,^.\{4\}\(.*\)1970.*,\1,g"

További két javaslat:

grep '^+++' valami.patch
(üssetek, de nem értem, miért nem kell a pluszt backslaslelni -- közben rájöttem, az az egrep, ami ennyire profi, hogy mást jelent a plusz)

rsync -avn regi/ uj/
(fontos a végén a per jel)

[quote:af6638ab3b="egmont"]További két javaslat:

grep '^+++' valami.patch

Ez a modosult fileokat is listazza. Sot, ugy kb az osszeset.

[quote:af6638ab3b="egmont"]
(üssetek, de nem értem, miért nem kell a pluszt backslaslelni -- közben rájöttem, az az egrep, ami ennyire profi, hogy mást jelent a plusz)

Alap POSIX regexp VS Perl-style regexp :)

[quote:af6638ab3b="egmont"]
rsync -avn regi/ uj/

Na, ez nem jutott eszembe! Jo otlet, es meg egyszeru is :)