[tar] files met '[' en ']' tekens uit tarbal vissen

Pagina: 1
Acties:

  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 21:38
Ik heb een tar file met allemaal files erin, en ik wil er eentje uithalen, maar er zitten '[' en ']' tekens in de filename die in de tar zitten, en dan krijg ik die er niet uit. iemand weet hoe dit moet?
voorbeeld:
code:
1
2
3
4
5
6
7
$ tar cpvf noir.tar Noir/
Noir/
Noir/[Noir OST1] 01 Copellia's Coffin.mp3
<knip>
$ tar xpvf noir.tar "[Noir OST1] 01 Copellia's Coffin.mp3"
tar: Noir/[NOIR OST1] 01 Copellia's Coffin.mp3: Not found in archive
tar: Error exit delayed from previous errors

en dit komt niet door de ' in de filename.
ik kan allerlei rare tekens erin hebben en dan is er nix aan de hand. alleen bij [ en ] gaat het mis. :?

The problem is in the part of your brain that handles intelligence.


  • Wilke
  • Registratie: December 2000
  • Laatst online: 20:19
Hmm... En probeer het eens met enkele haken en een \' waar het letterlijk in de string voorkomt? of met backslashes voor de [ en ] tekens?

  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 21:38
als een file alleen een ] heeft werkt het schijnbaar wel.
met een [ erin werkt weer niet.
en of je nou escaped met \\[ of "[" gebruikt, maakt nix uit.

The problem is in the part of your brain that handles intelligence.


  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 05-03 19:51
je moet wel beide ['s escapen he?
dus als je bestand
code:
1
Foo[bar].foo

wil hebben wordt dat
code:
1
Foo\\[bar\].foo


Of is dit heel beidehand en deed je dat ook?

[ Voor 17% gewijzigd door BezurK op 15-01-2003 16:25 . Reden: foutje ]

Rookworst zonder R is ook worst.


  • Wirf
  • Registratie: April 2000
  • Laatst online: 15:43
Probeer deze eens:

tar xpvf noir.tar '[Noir OST1] 01 Copellia'''s Coffin.mp3'

(met ' ipv van " en ''' ipv ' )

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 21:38
hmm.. dat wil al helemaal niet .. bash snapt het dan niet meer echt (ik denk door die ''', maar any other iets met \' ofzo wil nogsteeds niet..)

The problem is in the part of your brain that handles intelligence.


  • MikeN
  • Registratie: April 2001
  • Laatst online: 13-05 14:50
Je hebt
code:
1
tar xpvf noir.tar "\[Noir OST1\] 01 Copellia\'s Coffin.mp3"

nu geprobeerd?

  • mvdejong
  • Registratie: Juni 2000
  • Laatst online: 29-11-2024

mvdejong

When does the hurting stop ?

Even eerst aangeven waarom het zo los niet werkt.
De reeks "a[bcd]e" is een zoek-patroon, dat succes heeft met de volgende strings : "abe", "ace", en "ade".
In jouw geval zoekt tar dus een bestand in je archief met een van de namen :
"N 01 Copellia's Coffin.mp3"
"o 01 Copellia's Coffin.mp3"
"i 01 Copellia's Coffin.mp3"
:
"T 01 Copellia's Coffin.mp3"
"S 01 Copellia's Coffin.mp3"
"1 01 Copellia's Coffin.mp3"
en
"[Noir OST1] 01 Copellia's Coffin.mp3"
voldoet daar niet aan.
Allereerst is het het beste om te zorgen dat bash van het patroon afblijft, dus het patroon tussen enkele aanhalings-tekens plaatsen, dan wel het aanwezige enkele aanhalings-teken escapen zodat het patroon niet voortijdig wordt beeindigd :
'[Noir OST1] 01 Copellia\'s Coffin.mp3'
en dan ook de blokhaken escapen zodat tar die niet ziet als iets speciaals :
'\[Noir OST1\] 01 Copellia\'s Coffin.mp3'
Als je dit zou doen zonder de zaak tussen enkele aanhalings-tekens te plaatsen, haalt bash al weer al die backslashes eruit, vandaar dat die eerste poging niet werkte.

The number of things that Arthur couldn't believe he was seeing was fairly large


  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 21:38
argh .. ik heeft em hoor ..
je moet alleen de 1e [ escapen, en dan werkt het wel
code:
1
2
sjonny@kirika:~/tartest$ tar xpvf noir.tar "Noir/\[NOIR OST1] 01 Copellia's Coffin.mp3"
Noir/[NOIR OST1] 01 Copellia's Coffin.mp3

w00t! :)

The problem is in the part of your brain that handles intelligence.


  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 21:38
[quote]mvdejong schreef op 15 januari 2003 @ 16:47:
argh .. ik word gek denk ik ..
anyway .. het kan, dus ik ben allang blij ,,
maar waarom die het ooit es niet deed (op vele mogelijke manieren) is me nog ff een raadsel..
* Sjonny gaat weer verder klooien..

[ Voor 82% gewijzigd door Sjonny op 15-01-2003 16:59 . Reden: vage bedoelingen ]

The problem is in the part of your brain that handles intelligence.


Verwijderd

Sjonny weet niet of je het door had, meschien wel meschien niet maar er zijn 3 soorten hakken in linux met elk hun eigen betekenis.
"foo bat" is een string, en alle specialle tekens worden toegelaten. (zoals [ ] :P )
'foo bar' is een string, en alle specialle tekens worden niet toegelaten (zoals [ ] :P )
dan heb je ook nog `foo bar` en dat stuurt wat er tussen de ` en ` staat naar de bash en gebruikt de uitvoer als string.

code:
1
2
echo "$USER is blij dat het de "`date +%e`'de is want dan krijgt hij $$$'
StratoS_v2.0 is blij dat het de 15de is want dan krijgt hij $$$

[ Voor 8% gewijzigd door Verwijderd op 15-01-2003 22:18 ]


  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 21:38
Verwijderd schreef op 15 januari 2003 @ 22:18:
Sjonny weet niet of je het door had, meschien wel meschien niet maar er zijn 3 soorten hakken in linux met elk hun eigen betekenis.
"foo bat" is een string, en alle specialle tekens worden toegelaten. (zoals [ ] :P )
'foo bar' is een string, en alle specialle tekens worden niet toegelaten (zoals [ ] :P )
dan heb je ook nog `foo bar` en dat stuurt wat er tussen de ` en ` staat naar de bash en gebruikt de uitvoer als string.

code:
1
2
echo "$USER is blij dat het de "`date +%e`'de is want dan krijgt hij $$$'
StratoS_v2.0 is blij dat het de 15de is want dan krijgt hij $$$
hmm, van die ' ' tekens wist ik niet.. maar dat is bash, dit is tar. wanneer tar een [ tegenkomt maakt ie er een regexp van, en dan gebeurt precies wat mvdejong uitlegd. wanneer je dan de [ escaped met \ wordt er in tar een normale memcmp() gebruikt, wat dus de bedoeling is.

The problem is in the part of your brain that handles intelligence.


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 20:30

deadinspace

The what goes where now?

Sjonny schreef op 16 January 2003 @ 08:42:
hmm, van die ' ' tekens wist ik niet.. maar dat is bash, dit is tar. wanneer tar een [ tegenkomt maakt ie er een regexp van, en dan gebeurt precies wat mvdejong uitlegd. wanneer je dan de [ escaped met \ wordt er in tar een normale memcmp() gebruikt, wat dus de bedoeling is.
Merk op dat bash ook die [ en ] interpreteert. Als tar ze dan ook nog eens interpreteert, dan moet je ze dubbel escapen.

Dus \\\\[ verandert bash in \\[, wat er verandert in [ .
Bash verandert \\[ in [, en tar gaat [ dan interpreteren als regexp. Daar ging het waarschijnlijk op fout.

  • mvdejong
  • Registratie: Juni 2000
  • Laatst online: 29-11-2024

mvdejong

When does the hurting stop ?

deadinspace schreef op 16 January 2003 @ 16:03:
[...]

Merk op dat bash ook die [ en ] interpreteert. Als tar ze dan ook nog eens interpreteert, dan moet je ze dubbel escapen.

Dus \\\\[ verandert bash in \\[, wat er verandert in [ .
Bash verandert \\[ in [, en tar gaat [ dan interpreteren als regexp. Daar ging het waarschijnlijk op fout.
Nee, als je enkele aanhalings-tekens gebruikt, dan bemoeit bash zich niet met wat zich daarbinnen afspeelt. Met dubbele aanhalings-tekens, of zonder wel. Het verschil tussen die 2 laatste is dat "dit is een test" met aanhalings-tekens als 1 parameter wordt aangeboden aan het aangeroepen programma, en zonder aanhalings-tekens 4, elk woord is dan een aparte parameter. Je hebt wel gelijk, dat je in het onderhavige geval dubbele aanhalings-tekens kunt gebruiken en dan de blok-haken dubbel escapen.

The number of things that Arthur couldn't believe he was seeing was fairly large


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 20:30

deadinspace

The what goes where now?

mvdejong schreef op 16 January 2003 @ 17:19:
Nee, als je enkele aanhalings-tekens gebruikt, dan bemoeit bash zich niet met wat zich daarbinnen afspeelt.
Dat weet ik, maar ik bedoelde mijn voorbeeld ook zonder aanhalingstekens (die btw ook een vorm van escapen zijn, dus '\\[' is nog steeds dubbele escaping).

Verwijderd

Even kijken in de manpage van tar(1):
To extract all the C sources and headers from an archive named backup.tar, type

tar xf backup.tar "*.[ch]"

Note that the pattern must be quoted to prevent the shell from attempting to expand it according the files in the current working directory (the shell does not have access to the list of files in the archive, of course).
Overigens weer een goede reden om geen rare tekens in bestandsnamen te zetten. Vooral als je ze ook nog in moet tikken.

  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 21:38
Verwijderd schreef op 17 januari 2003 @ 14:53:
Even kijken in de manpage van tar(1):

[...]


Overigens weer een goede reden om geen rare tekens in bestandsnamen te zetten. Vooral als je ze ook nog in moet tikken.
ja, en daar hebben we een tab toets voor :P
nix mis met "rare" tekens in je filenaam, zolang het maar ascii is..

The problem is in the part of your brain that handles intelligence.


Verwijderd

Sjonny schreef op 17 januari 2003 @ 16:44:
[...]
ja, en daar hebben we een tab toets voor :P
nix mis met "rare" tekens in je filenaam, zolang het maar ascii is..
"Nix mis?", moest anders wel even een draadje voor in het leven geroepen worden :P

  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

Waarom moeilijk doen als het ook makkelijk kan?

Midnight Commander :*)

Mc gaat goed om met "vervelende" bestandnamen en kan zo een file uit je tar bestand peuteren.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Dus [ ... ] is dan de enige regex-syntax die tar snapt, en dus ook de enige waar je rekening mee moet houden?
Anders zou "*.[ch]" een beetje vreemde regex zijn :) bij toeval de * en de . omgedraaid :P

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 21:38
A_L schreef op 17 January 2003 @ 23:02:
Waarom moeilijk doen als het ook makkelijk kan?

Midnight Commander :*)

Mc gaat goed om met "vervelende" bestandnamen en kan zo een file uit je tar bestand peuteren.
en midnight commander is ook zo makkelijk om in je script te gebruiken eh :P

The problem is in the part of your brain that handles intelligence.


  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 21:38
drm schreef op 17 January 2003 @ 23:50:
Dus [ ... ] is dan de enige regex-syntax die tar snapt, en dus ook de enige waar je rekening mee moet houden?
Anders zou "*.[ch]" een beetje vreemde regex zijn :) bij toeval de * en de . omgedraaid :P
als ik het goed heb wel. tar snapt ? * en [, maar niet .* ofzo,? en * zijn simpele wildcards, [ch] is een 'or' wildcard voor en 'c' en 'h' hier.

The problem is in the part of your brain that handles intelligence.


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 20:30

deadinspace

The what goes where now?

Tar ondersteunt helemaal een regexps, alleen simpele pattern matching met ?, * en [], net als bash.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

* drm wist niet dat [ .. ] character classes ook in bash toegestaan waren :)
nu dus wel :P

[ Voor 5% gewijzigd door drm op 18-01-2003 12:52 . Reden: rml :z ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

Sjonny schreef op 18 januari 2003 @ 11:39:
[...]
en midnight commander is ook zo makkelijk om in je script te gebruiken eh :P
:? Ik kan uit je start-post niet opmaken dat je het in een script gebruikt :P


Maar inderdaad in een script moet je iets moeilijker te werk gaan.
Pagina: 1