So konvertieren Sie die TAR-Datei vom Gnu-Format in das Pax-Format

7

Einerseits habe ich viele TAR-Dateien, die im Gnu- Format erstellt wurden, und andererseits habe ich ein Tool, das nur das Pax- Format (auch bekannt als Posix- Format) unterstützt. Ich suche nach einer einfachen Möglichkeit, die vorhandenen TAR-Dateien in das Pax-Format zu konvertieren - ohne sie in das Dateisystem zu extrahieren und die Archive neu zu erstellen.

GNU tar unterstützt beide Formate. Ich habe jedoch keinen einfachen Weg zur Konvertierung gefunden.

Wie kann ich die vorhandenen gnu tar-Dateien in pax konvertieren ?

[Ich habe dieselbe Frage auf superuser.com gestellt, und ein Kommentator hat empfohlen, die Frage auf unix.stackexchange.com zu migrieren.]

nosid
quelle

Antworten:

6

Sie können dies mit bsdtar tun :

ire@localhost: bsdtar -cvf pax.tar --format=pax @gnu.tar
ire@localhost:file gnu.tar
gnu.tar: POSIX tar archive (GNU)
ire@localhost:file pax.tar
pax.tar: POSIX tar archive

@archiveist die magische Option. Aus der Manpage :

@archive
     (c and r mode only) The specified archive is opened and the
     entries in it will be appended to the current archive.  As a sim-
     ple example,
       tar -c -f - newfile @original.tar
     writes a new archive to standard output containing a file newfile
     and all of the entries from original.tar.  In contrast,
       tar -c -f - newfile original.tar
     creates a new archive with only two entries.  Similarly,
       tar -czf - --format pax @-
     reads an archive from standard input (whose format will be deter-
     mined automatically) and converts it into a gzip-compressed pax-
     format archive on stdout.  In this way, tar can be used to con-
     vert archives from one format to another.
ire_and_curses
quelle
1
Warum kann Gnu Tar diese einfache und offensichtliche Sache nicht? +1
Serge
3

Der Benutzer Random832 schrieb:

[...] Erstellen Sie eine leere TAR-Datei. [...]
Haftungsausschluss: Ich habe dieses Skript nicht getestet.

Gott schütze dich! Du hast mir Ideen gegeben. Ich habe Ihr Skript getestet, aber wenn jemand eine leere TAR-Datei erstellt, betrachtet TAR sie nicht als "Posix Tar" -Datei. Also habe ich ein Skript geschrieben, das eine "Posix Tar" -Datei mit etwas darin erstellt und es schließlich löscht. Ich habe es "gnu2posix" genannt, die Leute können es frei benutzen:

#!/bin/bash
set -o nounset

### // Convert a tar file, from the "gnu tar" format to the "posix tar" one (which in Windows, for example, allows seeing correctly all of the utf-8 characters of the names of the files)

NAME_PROGRAM=$(basename "$0")

alert() {
  echo "$@" >&2 ;
}

alert_about_usage() {
echo "The usage of this program is: $NAME_PROGRAM FILE_TO_CONVERT RESULTING_FILE" >&2
}

if [[ $# != 2 ]]; then
    alert "ERROR: the program \"$NAME_PROGRAM\" needs two arguments, but it has received: $#." 
    alert_about_usage
    exit 1;
fi

file_to_convert="$1"

if [[ ! -f "$file_to_convert" ]]; then
    error "ERROR: the program \"$NAME_PROGRAM\" can't access any file with this path: \"$file_to_convert\"."
    alert_about_usage
    exit 1;
fi

resulting_file="$2"

# // Create a file with something inside, in this case, the "." folder (without its contents). This way, a real "posix tar" is created
tar --format=posix -cf "$resulting_file" . --no-recursion

# // Add "$file_to_convert", finally getting a "posix tar" file
tar -Avf "$resulting_file" "$file_to_convert"  

# // Just in case, delete the "." folder from the file
tar -f "$resulting_file" --delete "."


# // End of file
Sys
quelle
2

Gnu tar verfügt über die Option "Verketten", erfordert jedoch, dass das Zielarchiv aufgrund des beabsichtigten Anwendungsfalls bereits vorhanden ist.

tar --format=posix -cvf converted.tar --files-from=/dev/null # create an empty tar file
tar --format=posix -Avf converted.tar original.tar

Haftungsausschluss: Ich habe dieses Skript nicht getestet.

Random832
quelle
Aus der Dokumentation ging hervor, dass dies zu ungültigen TAR-Dateien führen würde, wenn das Quell- und das Zielformat unterschiedlich wären, aber das habe ich nicht getestet.
ire_and_curses
WARNUNG Es ist bekannt, dass dies zu fehlerhaften Archiven führt, da GNU tar sich nicht um Archivformate kümmert.
schily