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)?

Odpowiedzi:


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

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 

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 !!


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

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/

0

To zadziałało dla mnie:

gzip -dc "<your_file>.tgz" | tar x -C <location>

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 -

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

-3
tar -Cczf ~/backup.tgz /home/username/drupal/sites/default/files

-C zrobi płytę za ciebie


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.