Làm cách nào để tạo tar một thư mục mà không giữ lại cấu trúc thư mục?


82

Tôi đang làm việc trên một tập lệnh sao lưu và muốn tải lên một thư mục tệp:

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

Điều này gắn nó lên, nhưng khi tôi mở tệp kết quả, nó bao gồm cấu trúc tệp đầy đủ: các tệp nằm trong home/username/drupal/sites/default/files.

Có cách nào để loại trừ các thư mục mẹ, để tar kết quả chỉ biết về thư mục cuối cùng ( files)?

Câu trả lời:


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

19
Bạn cũng có thể sử dụng tùy chọn -C của tar.
GuruM

8
cd không được khuyến khích và dễ xảy ra lỗi, ví dụ như tập lệnh lớn hoặc tệp trang. Câu trả lời dưới đây thường có thể sử dụng và chính xác hơn.
Gregor

Đã thử -C--directorykhông hiệu quả với tôi trên Ubuntu 16.04. Đây là tùy chọn duy nhất hoạt động.
haxpor 23/09/18

Đây là tùy chọn duy nhất hoạt động -C thêm a. thư mục gốc, đó không phải là những gì chúng tôi muốn.
Nicolas Dorier

165

Sử dụng tùy chọn --directory:

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

1
Nếu tôi muốn đặt 2 thư mục ở đây thì sao?
Shanpei Zhou

@ user3352668 chỉ cần thêm hai thư mục. Ví dụ: nếu mặc định chứa "files" và "morefiles", chỉ cần thêm "morefiles" vào chuỗi nbt. Btw: Giải pháp tốt nhất là nbt's, nên là câu trả lời được chấp nhận
Anonymous

4
-C DIR giống như --directory = DIR , thay đổi thư mục thành DIR
Markus

1
Tôi chỉ nghĩ rằng tôi muốn đề cập rằng thứ tự ở đây là quan trọng. Bạn không thể có mặt trước --directory="/home/username/drupal/sites/default files"của điểm đến ~/backup.tgz.
Chris Stryczynski

6
@ChrisStryczynski Lưu ý rằng không phải là đường dẫn được cung cấp bởi --directorytùy chọn "/home/username/drupal/sites/default files". Nó /home/username/drupal/sites/default, theo sau là một đối số vị trí chỉ định tên của thư mục được tar'ed , files.
Chap

48

Xin chào, tôi có một giải pháp tốt hơn khi nhập vào thư mục được chỉ định là không thể (Makefiles, v.v.)

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

Đừng quên dấu chấm (.) Ở cuối !!


4
Dấu chấm ở cuối có tác dụng gì?
Bruce Sun

3
@BruceSun -C thay đổi thư mục làm việc của bạn. Dấu chấm cho tar biết bạn muốn lưu trữ thư mục nào (tức là thư mục đang làm việc hiện tại).
user12345

2
Nếu bạn bỏ qua các dấu chấm ở cuối, bạn có thể sẽ nhận được cảnh báo: tar: Từ chối Nhát để tạo ra một kho lưu trữ trống
user12345

3
Mọi người đều nói về tùy chọn -C hoặc - thư mục nhưng không có '.' ở phần cuối như @MaikolD đã đề cập, nó không hoạt động - ít nhất là trên môi trường của tôi.
aks

5
Điều này vẫn để lại cho bạn một .thư mục trong thư mục gốc của tar
electrovir

2

Để gunzip tất cả các tệp txt (* .txt) từ /home/myuser/workspace/zip_from/ đến /home/myuser/workspace/zip_to/không có cấu trúc thư mục của tệp nguồn, hãy sử dụng lệnh sau:

tar -P -cvzf /home/myuser/workspace/zip_to/mydoc.tar.gz  --directory="/home/myuser/workspace/zip_from/" *.txt

1

Tạo một kho lưu trữ tar

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

Hủy tệp tar trên máy cục bộ

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

Tải lên máy chủ

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

Un-tar trên máy chủ

ssh -i $privatekey $server tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/

0

Điều này đã làm việc cho tôi:

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

0

Đối với tôi -C hoặc - thư mục không hoạt động, tôi sử dụng cái này

cd source/directory/or/file
tar -cvzf destination/packaged-app.tgz *.jar
# this will put your current directory to what it previously was
cd -

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

-C làm cd cho bạn


Điều này sẽ không hoạt động. Xem các giải pháp của MaikoID và Neil Butterworth.
Vincent

3
-Choạt động, nhưng phải được sử dụng như thế-C <dir> file1 file2 ...
vyom
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.