tar die alleen nieuwere bestanden uitpakt

Pagina: 1
Acties:

  • jvhaarst
  • Registratie: Maart 2000
  • Laatst online: 08-02 23:13

jvhaarst

Eendracht maakt macht

Topicstarter
Ik heb gezocht, maar blijkbaar bestaat het niet :
Een tar die alleen bestanden uitpakt die veranderd zijn.

Ik haal iedere dag met wget een tar van een site, en ik wil alleen die files uitpakken die nieuwe zijn dan de files die ik al heb. Ik heb gee controle over de file op de site, anders zou ik er wel een zip van maken, maar de NCBI is niet echt flexibel.

Bij het maken van een tar heeft tar de optie --update , maar voor uitpakken kan ik zoiets niet vinden.

Zie ik iets over het hoofd , of kan het gewoon niet ?

If you don’t have enough time, stop watching TV.


  • Wilke
  • Registratie: December 2000
  • Laatst online: 10:41
Misschien werkt dit:
code:
1
find | tar xf --exclude-from -


Wel in de goede dir starten en uiteraard eerst goed uittesten op onbelangrijke gegevens!

Evt. kun je aan find een (absoluut of relatief) pad meegeven, dan krijg je een lijst waarbij dat pad ook voor de bestandsnamen staat. In ieder geval moet je natuurlijk zorgen dat de filenames die er uit komen gelijk zijn aan hoe ze in de tarfile staan.

  • Sendy
  • Registratie: September 2001
  • Niet online
GNU tar heeft "--keep-newer-files". Heeft de TS wel de handleiding gelezen?

[ Voor 13% gewijzigd door Sendy op 12-08-2004 16:55 ]


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Daar gebruik je meestal ook geen 'tar' voor, maar geintjes zoals rsync.
Oh, en mijn GNU tar heeft geen '--keep-newer-files'.

[ Voor 34% gewijzigd door CyBeR op 12-08-2004 16:45 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


  • Sendy
  • Registratie: September 2001
  • Niet online
Vaag genoeg geeft deze pagina aan dat --keep-newer-files er wel inzit, maar mijn "man tar" of tar --help (ook 1.14) heeft dan niet... WTF!?!

Ik zag in mijn 1.14 tar wel de optie --newer-mtime. Misschien dat daar wat mee gedaan kan worden.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-02 22:54

Creepy

Tactical Espionage Splatterer

De auteur van GNU tar hecht meer waarde aan de info pages dan aan de manpage. Misschien dat --keep-newer-filer er bij de info page wel bij staat?
Hier in elk geval niet...

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
In de categorie 101 oplossingen ;)

Met:
code:
1
tar -df bestand.tar | grep '.*: Mod time differs' | cut -d: -f 1

Kun je een lijst krijgen van bestanden in het tar bestand die een andere modification time hebben dan de bestanden op het fs. Zegt alleen niets over welk bestand nieuwer is, maar als je zeker weet dat de bestanden in de tar altijd gelijk of nieuwer zijn kun je dit wel gebruiken.

behalve voor bestanden met een ':' in de naam, en bestanden die ': Mod time differs' heten zouden ook problemen kunnen geven.

"He took a duck in the face at two hundred and fifty knots."


  • Sendy
  • Registratie: September 2001
  • Niet online
Creepy schreef op 12 augustus 2004 @ 16:58:
De auteur van GNU tar hecht meer waarde aan de info pages dan aan de manpage. Misschien dat --keep-newer-filer er bij de info page wel bij staat?
Hier in elk geval niet...
Ja, in mijn tar info staat-ie wel:
`--keep-newer-files'
Do not replace existing files that are newer than their archive
copies when extracting files from an archive.
De TS kan dat dus gewoon gebruiken.

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Ehm. In mijn 'tar' staat 'ie niet. Dwz:
code:
1
2
3
websrv02:/home # tar --keep-newer-files
tar: unrecognized option `--keep-newer-files'
Try `tar --help' for more information.

All my posts are provided as-is. They come with NO WARRANTY at all.


  • Sendy
  • Registratie: September 2001
  • Niet online
En doe eens tar --version? (Mijne doet het trouwens wel.)

[ Voor 38% gewijzigd door Sendy op 12-08-2004 17:13 ]


  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
`--keep-newer-files'

Do not replace existing files that are newer than their archive copies when extracting files from an archive.
Dus nieuwere bestanden op het fs worden niet vervangen door oudere in het archief. Nog steeds worden alle bestanden uitgepakt, en niet alleen de bestanden in het archief die nieuwer zijn dan die op het fs. (of ben ik nu gek?)

"He took a duck in the face at two hundred and fifty knots."


  • jvhaarst
  • Registratie: Maart 2000
  • Laatst online: 08-02 23:13

jvhaarst

Eendracht maakt macht

Topicstarter
Ik heb even gezocht, --keep newer files dateert van 29/2/2004 , kijk maar.
Dus ik zal een nieuwere tar moeten installeren.

En even geduld moeten hebben, debian is nog niet zover :
http://packages.qa.debian.org/t/tar.html

[ Voor 23% gewijzigd door jvhaarst op 12-08-2004 19:44 ]

If you don’t have enough time, stop watching TV.


  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Hmm, ik zit even met de --keep-newer-files optie te spelen, maar ik begrijp niet helemaal hoe dat nu moet werken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ tar --version
tar (GNU tar) 1.14
Copyright (C) 2004 Free Software Foundation, Inc.
This program comes with NO WARRANTY, to the extent permitted by law.
You may redistribute it under the terms of the GNU General Public License;
see the file named COPYING for details.
Written by John Gilmore and Jay Fenlason.
$ ls -l
total 12
-rw-r--r--  1 mh users     0 Aug 12 18:58 a
-rw-r--r--  1 mh users     0 Aug 12 18:58 b
-rw-r--r--  1 mh users     0 Aug 12 18:58 c
-rw-r--r--  1 mh users     0 Aug 12 20:17 d
-rw-r--r--  1 mh users 10240 Aug 12 20:15 newfiles.tar
$ tar --list --verbose --file newfiles.tar
-rw-r--r-- mh/users          0 2004-08-12 19:05:09 a
-rw-r--r-- mh/users          0 2004-08-12 19:05:09 b
-rw-r--r-- mh/users          0 2004-08-12 18:58:47 c
-rw-r--r-- mh/users          0 2004-08-12 18:58:47 d
$ tar --compare --file newfiles.tar
a: Mod time differs
b: Mod time differs
d: Mod time differs
$

Wat je wilt is dat 'a' en 'b' worden uitgepakt, want die zijn nieuwer dan de bestanden 'a' en 'b' op het fs. Voor 'c' hoeft niets te gebeuren. En bestand 'd' is nieuwer op het fs, dus die moet zo blijven. Als ik nu echter uitpak met --keep-newer-files:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$ tar --extract --keep-newer-files --file newfiles.tar
tar: a: Warning: Cannot stat: No such file or directory
tar: Current `a' is newer
tar: b: Warning: Cannot stat: No such file or directory
tar: Current `b' is newer
tar: Current `c' is newer
tar: Current `d' is newer
$ ls -l
total 12
-rw-r--r--  1 mh users     0 Aug 12 18:58 c
-rw-r--r--  1 mh users     0 Aug 12 20:17 d
-rw-r--r--  1 mh users 10240 Aug 12 20:15 newfiles.tar
$

'd' wordt dus netjes bewaard, maar nu ben ik 'a' en 'b' kwijt!

Als je echter zonder --keep-newer-files uitpakt krijg je:
code:
1
2
3
4
5
6
7
8
9
$ tar --extract --file newfiles.tar
$ ls -l
total 12
-rw-r--r--  1 mh users     0 Aug 12 19:05 a
-rw-r--r--  1 mh users     0 Aug 12 19:05 b
-rw-r--r--  1 mh users     0 Aug 12 18:58 c
-rw-r--r--  1 mh users     0 Aug 12 18:58 d
-rw-r--r--  1 mh users 10240 Aug 12 20:15 newfiles.tar
$

Nu heb je wel de nieuwe versie van 'a' en 'b', maar ben je de nieuwe 'd' kwijt. Nu is tar ook niet echt bedoeld om directory trees synchroon te houden (rsync is waarschijnlijk een stuk geschikter), maar het lijkt me wel vreemd dat 'a' en 'b' gewist worden.

Om te bereiken wat de TS (volgens mij) wilt kun je het volgende scriptje gebruiken:
Ruby:
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env ruby

exit 1 if ARGV.size < 1

tarfiles = `tar --list --verbose --utc --file #{ARGV[0]}`.split( /^/).collect { |i|
    /(\d\d\d\d)-(\d\d)-(\d\d)\s(\d\d):(\d\d):(\d\d)\s(.*)$/ =~ i
    $7 if !test( ?e, $7) || File.stat( $7).mtime < Time.utc( *$~[1..6])
}.compact

system( 'tar', '--extract', '--verbose', '--file', ARGV[0], *tarfiles) if 
    !tarfiles.empty?

[ Voor 11% gewijzigd door _Squatt_ op 13-08-2004 03:52 . Reden: Als ik gedronken heb zie ik mijn grammatica fouten wel :) ]

"He took a duck in the face at two hundred and fifty knots."


  • Kees
  • Registratie: Juni 1999
  • Laatst online: 18-02 12:35

Kees

Serveradmin / BOFH / DoC
of je pakt het uit in /tmp en rsynced daarmee ;)

Maar voor je heel moeilijk gaat lopen doen; is het belangrijk dat die files niet overschreven worden?

[ Voor 53% gewijzigd door Kees op 12-08-2004 21:01 ]

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Kees schreef op 12 augustus 2004 @ 21:00:
of je pakt het uit in /tmp en rsynced daarmee ;)
Mijn hamer is Ruby, en daarmee lijkt elk probleem op een spijker :P.
Maar voor je heel moeilijk gaat lopen doen; is het belangrijk dat die files niet overschreven worden?
Inderdaad, als je aanneemt dat de bestanden in de tar in ieder geval gelijk of nieuwer zijn dan die op je fs kun je gewoon met 'tar xvf' uitpakken. Bestanden met een gelijke mtime worden dan gewoon overschreven met precies dezelfde data.

De TS wil welllicht alleen nieuwere bestanden extracten om tijd te besparen (ofzo, verder geen weet van).

"He took a duck in the face at two hundred and fifty knots."


  • jvhaarst
  • Registratie: Maart 2000
  • Laatst online: 08-02 23:13

jvhaarst

Eendracht maakt macht

Topicstarter
Ik wil idd resources sparen, het is een beetje onzin om iedere keer 3Gbyte uit te pakken als dat niet hoeft.
Ik was al bang dat ik een scriptje zou moeten schrijven om de filedates op het FS en in de tar te vergelijken om dat te voorkomen.

Maar eerst maar eens kijken wat er nu aan de hand is met tar, beetje vreemd dat ie het niet goed doet.
Dat ie een oudere file wegmikt is wel erg vaag, maar ik krijg tar niet zo ver dat ie wel de oude laat staan, en alleen de nieuwe uitpakt.

Hebben we een bugje ontdekt ?

[ Voor 22% gewijzigd door jvhaarst op 13-08-2004 09:29 ]

If you don’t have enough time, stop watching TV.

Pagina: 1