tập tin tar từ thư mục khác mà không sao chép chúng


10

Điều này sẽ rất đơn giản cho các chuyên gia ở đây.

Tôi có tài khoản Linux với dung lượng đĩa người dùng chỉ 6GB. Có một số thư mục dữ liệu /optvới khoảng 3 GB dữ liệu khi được nén lên tới 1GB. Có một số liên kết tượng trưng trong data-folder. Thông thường để lấy một bản sao lưu công việc tôi thường làm như sau.

cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder

Bây giờ tôi đã tiêu thụ 2,5 GB trong hạn ngạch đĩa người dùng của mình, tôi chỉ có đủ dung lượng để sao chép các tệp vào nhà của mình, nhưng không phải là tarnó một lần nữa.

Có cách nào để tar và sao chép thư mục trong một lệnh duy nhất không, bằng cách sử dụng một đường ống.

PS Tôi không thể /opttruy cập vì tôi chỉ đọc quyền truy cập /opt.


Bạn chắc chắn có thể tar trong / opt, bạn không thể viết ở đó, đó là tất cả. Cờ 'f' thành tar (3) nói để gửi kết quả vào tệp đó, rất có thể là một nơi khác. Ví dụ cd /opt; tar zcf $HOME/junk.tar.gz junk.
vonbrand

Câu trả lời:


5

Bạn muốn tạo một tập tin tar từ vị trí các tập tin bạn cần để nằm?

Có rất nhiều cách để làm điều này.

Nếu nó được tạo cục bộ (= trên cùng một máy):

tar czvf /path/to/destination/newfile.tar.gz  ./SOURCEDIR_OR_FILES

Bạn có thể thêm các tập tin hoặc thư mục bổ sung vào tar ở cuối lệnh đó.

Nếu nó được tạo từ xa (nghĩa là bạn muốn tạo tệp tar trên máy chủ từ xa từ máy chủ chứa dữ liệu cần xử lý):

tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'

Phiên bản sau rất linh hoạt. Ví dụ: bạn cũng có thể "sao chép" một thư mục + thư mục con bằng cách sử dụng cùng một kỹ thuật:

Sao chép thư mục + thư mục con sang thư mục cục bộ khác:

tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )

Sao chép thư mục + thư mục con sang thư mục từ xa khác:

tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '

Bỏ 'v' nếu bạn không cần nó để hiển thị các tệp vì chúng là tar-ed (hoặc chưa được chỉnh sửa): sau đó sẽ nhanh hơn nhiều, nhưng sẽ không nói nhiều trừ khi có lỗi.

Tôi sử dụng ". / ..." cho nguồn để buộc tar lưu trữ nó dưới dạng đường dẫn ĐÁNG TIN CẬY. Trong một số trường hợp, bạn sẽ muốn thêm thông tin đường dẫn bổ sung:

Ví dụ: để tar các tập tin crontab, bao gồm cả tập tin trong / etc, bạn có thể làm:

cd / ; tar czf all_crons.tgz  ./etc/*cron*  ./var/spool/cron

Tôi sử dụng trên mục đích đường dẫn tương đối: một số phiên bản OLD của tar có thể nguy hiểm và trích xuất các tệp bằng đường dẫn GLOBAL ban đầu của chúng, nghĩa là bạn có thể làm: cd /safedir ; tar xvf sometarvà có các tệp có tên toàn cầu ghi đè lên các tệp tại đường dẫn gốc của chúng, đó là NGOÀI TRỜI / safedir và không bên dưới nó! Rất nguy hiểm, và vẫn có thể xảy ra vì có những máy chủ sản xuất cũ ngoài kia. Tốt hơn nên được sử dụng để sử dụng các đường dẫn tương đối mọi lúc, ngay cả khi bạn sử dụng tar gần đây hơn.


khác không phải về sự khác biệt giữa các tars: trên một số bạn có thể cần sử dụng -cvfthay vì cvf, những người khác sẽ không nhận ra -phong cách. Và zđược sử dụng có nghĩa là "nén bằng 'nén'", nhưng trên 'tar' gần đây, nó có nghĩa là "nén bằng gzip". Bạn có thể biết nén nào được sử dụng trên một tệp với : file zefile. Và sau đó đổi tên cho phù hợp (nếu sử dụng tar của bạn compress, tốt hơn nên đổi tên thành .tar.Z chứ không phải .tar.gz)
Olivier Dulac

0

Sử dụng -htùy chọn tar. Từ trang người đàn ông:

-h, --dereference
don't archive symlinks; archive the files they point to

để bạn có thể sử dụng tar -zcvfh data-folder.tar.gz /opt/data-folder


Ohh tôi nên đề cập đến nó, tôi đã thử tar -zcvfh ~ / data-thư mục.tar.gz / opt / data-thư mục. Tôi đang nhận được vào một số loại vấn đề lưu trữ tròn. Tôi tiếp tục sao chép một số tập tin và không bao giờ kết thúc.
Kamath

Hình như có một liên kết tượng trưng tròn trong một thư mục phụ của dữ liệu.
Kamath

2
@AUZKamath, đó là một lỗi trong GNU tar. bsdtarThay vào đó, bạn có thể muốn thử hoặc pax( cd /opt && pax -Lw data-folder | gzip > ~/data-folder.tar.gz) sẽ phát hiện các vòng lặp
Stéphane Chazelas

1
@AUZKamath Bạn có thể đồng thời tar và xóa các tệp khỏi thư mục chính của bạn sử dụng tar -rf <tarfilename> <filename>để thêm vào tệp tar hiện có.
harish.venkat

1
@Stephane Chazelas, nó hoạt động bạn nên đưa nó lên làm câu trả lời.
Kamath
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.