533 Stimmen

Wie tariere ich ein Verzeichnis mit Dateien und Ordnern, ohne das Verzeichnis selbst einzuschließen?

Das tue ich normalerweise:

tar -czvf my_directory.tar.gz my_directory

Was ist, wenn ich nur alles (einschließlich aller versteckten Systemdateien) in my_directory einschließen möchte, aber nicht das Verzeichnis selbst? Das will ich nicht:

my_directory
   --- my_file
   --- my_file
   --- my_file

Ich möchte:

my_file
my_file
my_file

3voto

PanCrit Punkte 2660

Wenn es sich um ein Unix/Linux-System handelt und Sie sich um versteckte Dateien kümmern (die von * übersehen werden), müssen Sie das tun:

cd my_directory
tar zcvf ../my_directory.tar.gz * .??*

Ich weiß nicht, wie versteckte Dateien unter Windows aussehen.

2voto

gpz500 Punkte 21

Ich würde die folgende Bash-Funktion vorschlagen (das erste Argument ist der Pfad zum Verzeichnis, das zweite Argument ist der Basisname des resultierenden Archivs):

function tar_dir_contents ()
{
    local DIRPATH="$1"
    local TARARCH="$2.tar.gz"
    local ORGIFS="$IFS"
    IFS=$'\n'
    tar -C "$DIRPATH" -czf "$TARARCH" $( ls -a "$DIRPATH" | grep -v '\(^\.$\)\|\(^\.\.$\)' )
    IFS="$ORGIFS"
}

Sie können es auf diese Weise ausführen:

$ tar_dir_contents /path/to/some/dir my_archive

und es wird das Archiv erzeugt my_archive.tar.gz im aktuellen Verzeichnis. Es funktioniert mit versteckten (.*) Elementen und mit Elementen mit Leerzeichen in ihrem Dateinamen.

1voto

serendrewpity Punkte 11

Das ist es, was bei mir funktioniert.

tar -cvf my_dir.tar.gz -C /my_dir/ $(find /my_dir/ -maxdepth 1 -printf '%P ')

Sie können auch Folgendes verwenden

tar -cvf my_dir.tar.gz -C /my_dir/ $(find /my_dir/ -mindepth 1 -maxdepth 1 -printf '%P ')

Im ersten Befehl, finden. gibt eine Liste von Dateien und Unterverzeichnissen von Mein_Verzeichnis . Allerdings ist das Verzeichnis Mein_Verzeichnis selbst als "." in dieser Liste enthalten ist. Die -printf Parameter entfernt den vollständigen Pfad einschließlich des '.' und auch alle crlf Doch die Raum in der Formatzeichenkette '%P ' de printf hinterlässt ein Überbleibsel in der Liste der Dateien und Unterverzeichnisse von Mein_Verzeichnis und ist an einem führenden Leerzeichen im Ergebnis der finden. Befehl.

Für TAR ist das kein Problem, aber wenn Sie das beheben wollen, fügen Sie -Gewinntiefe 1 wie im zweiten Befehl.

1voto

Airstriker Punkte 151
tar -czvf mydir.tgz -C my_dir/ `ls -A mydir`

Führen Sie es eine Ebene über mydir aus. Dies wird keine [.] oder ähnliches enthalten.

0voto

marcingo Punkte 43
# tar all files within and deeper in a given directory
# with no prefixes ( neither <directory>/ nor ./ )
# parameters: <source directory> <target archive file>
function tar_all_in_dir {
    { cd "$1" && find -type f -print0; } \
    | cut --zero-terminated --characters=3- \
    | tar --create --file="$2" --directory="$1" --null --files-from=-
}

Sicherer Umgang mit Dateinamen mit Leerzeichen oder anderen ungewöhnlichen Zeichen. Sie können optional ein -name '*.sql' oder einen ähnlichen Filter an den Befehl find anhängen, um die einbezogenen Dateien einzuschränken.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X