Jak tarować katalog bez zachowywania struktury katalogów?

85

Pracuję nad skryptem kopii zapasowej i chcę tarować katalog plików:

tar czf ~/backup.tgz /home/username/drupal/sites/default/files

Spowoduje to zniszczenie go, ale kiedy rozpakuję plik wynikowy, zawiera on pełną strukturę plików: pliki są w formacie home/username/drupal/sites/default/files.

Czy istnieje sposób na wykluczenie katalogów nadrzędnych, aby wynikowy tar po prostu wiedział o ostatnim katalogu ( files)?

Brock Boland
źródło

Odpowiedzi:

39
cd /home/username/drupal/sites/default/files
tar czf ~/backup.tgz *
John Gibb
źródło
19
Możesz także użyć opcji -C tar.
GuruM
8
cd nie jest zalecane i jest podatne na błędy, np. duże skrypty lub pliki makefile. Poniższa odpowiedź jest bardziej użyteczna i poprawna.
Gregor
Próbuje -Ci --directorynie działa dla mnie na Ubuntu 16.04. To jedyna opcja, która działa.
haxpor
To jedyna opcja, która działa -C dodaj. folder główny, którego nie chcemy.
Nicolas Dorier
167

Użyj opcji --directory:

 tar czf ~/backup.tgz --directory=/home/username/drupal/sites/default files 
Tom Aranda
źródło
1
Co jeśli chcę umieścić tutaj 2 katalogi?
Shanpei Zhou
@ user3352668 po prostu dodaj dwa katalogi. Np. Jeśli default zawiera "pliki" i "morefiles", po prostu dodaj "morefiles" do łańcucha nbt. Btw: Najlepsze rozwiązanie to nbt's, powinna być zaakceptowana odpowiedź
Anonimowy
4
-C DIR to to samo co --directory = DIR , zmienia katalog na DIR
Markus
1
Pomyślałem, że wspomnę, że kolejność tutaj jest znacząca. Nie możesz mieć --directory="/home/username/drupal/sites/default files"przodu celu ~/backup.tgz.
Chris Stryczynski
6
@ChrisStryczynski Zauważ, że ścieżka podana przez --directoryopcję nie jest "/home/username/drupal/sites/default files". Jest to /home/username/drupal/sites/default, po czym następuje pozycyjnej argumentem określającym nazwę katalogu należy starowane, files.
Rozdz.
51

Cześć, mam lepsze rozwiązanie, gdy wejście do określonego katalogu jest niemożliwe (Makefiles itp.)

tar -cjvf files.tar.bz2 -C directory/contents/to/be/compressed .

Nie zapomnij o kropce (.) Na końcu !!

MaikoID
źródło
4
Co robi kropka na końcu?
Bruce niedz.,
3
@BruceSun -C zmienia twój katalog roboczy. Kropka mówi tar, który katalog chcesz zarchiwizować (tj. Bieżący katalog roboczy).
user12345
2
Jeśli pominiesz kropkę na końcu, prawdopodobnie otrzymasz ostrzeżenie: tar: Tchórzliwa odmowa utworzenia pustego archiwum
user12345
3
Wszyscy mówią o opcji -C lub --directory, ale bez małego „”. na koniec jak wspomniał @MaikolD, nie działa - przynajmniej na moim środowisku.
aks
6
To nadal pozostawia .folder w katalogu głównym tar
electrovir
2

Aby gunzip wszystkie pliki txt (* .txt) od /home/myuser/workspace/zip_from/ do /home/myuser/workspace/zip_to/bez struktury katalogów plików źródłowych, użyj następującego polecenia:

tar -P -cvzf /home/myuser/workspace/zip_to/mydoc.tar.gz  --directory="/home/myuser/workspace/zip_from/" *.txt
sangram
źródło
2

Utwórz archiwum tar

tar czf  $sourcedir/$backup_dir.tar --directory=$sourcedir WEB-INF en

Rozpakuj pliki tar na komputerze lokalnym

tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/

Prześlij na serwer

scp -r -i $privatekey $sourcedir/$backup_dir.tar $server:$deploydir/med365/
echo "File uploaded.. deployment folders"

Usuń tar na serwerze

ssh -i $privatekey $server tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/
Deepesh Rajpal
źródło
0

To zadziałało dla mnie:

gzip -dc "<your_file>.tgz" | tar x -C <location>
Vishrant
źródło
0

Dla mnie -C lub --directory nie działały, używam tego

cd source/directory/or/file
tar -cvzf destination/packaged-app.tgz *.jar
# this will put your current directory to what it previously was
cd -
Aashutosh Taikar
źródło
0

Uprzejmie użyj poniższego polecenia, aby wygenerować plik tar bez struktury katalogów

tar -C <directoryPath> -cvzf <Path of the tar.gz file> filename1 filename2... filename N

na przykład:

tar -C /home/project/files -cvzf /home/project/files/test.tar.gz text1.txt text2.txt
sathiya raj
źródło
-3
tar -Cczf ~/backup.tgz /home/username/drupal/sites/default/files

-C zrobi płytę za ciebie

raf
źródło
To nie zadziała. Zobacz rozwiązania MaikoID i Neila Butterwortha.
Vincent
3
-Cdziała, ale musi być używany jak-C <dir> file1 file2 ...
vyom