Có tar -xvf loại bỏ các tập tin hiện có từ thư mục?


10

Tôi có một kho lưu trữ tar và tôi muốn sử dụng tar -xvf.
Trong kho lưu trữ tar này tôi có một cây thư mục chứa một vài tệp. Trên hệ thống solaris 10 của tôi, cây thư mục này đã tồn tại và có một vài tệp trong đó.
Nếu tôi giải nén tệp lưu trữ là toàn bộ cây thư mục bị ghi đè hoặc chỉ các tệp có trong kho lưu trữ bị ghi đè?
Các tập tin không có phóng viên trong kho lưu trữ sẽ bị xóa?


Bạn luôn có thể tạo một bài kiểm tra .tar và một thư mục kiểm tra và dùng thử ... một câu trả lời bạn tự đưa ra sẽ tồn tại lâu hơn trong tâm trí của bạn hơn là một câu trả lời cho bất kỳ ai ở đây.
Jarvin

Câu trả lời là không. Nếu bạn suy nghĩ đủ kỹ, bạn sẽ nhận ra rằng nó không có nghĩa gì khi một chương trình trích xuất tệp từ kho lưu trữ sẽ xóa các tệp hoàn toàn không liên quan.
Fosco

Câu trả lời:


6

Các tệp trùng lặp đã tồn tại có thể hoặc không được giải nén và ghi đè tùy thuộc vào hệ thống của bạn. Tuy nhiên, nó thường làm theo mặc định. Các tệp trong kho lưu trữ nhưng không có trên hệ thống của bạn sẽ chỉ được thêm vào các thư mục mới hoặc hiện có trên hệ thống của bạn.

Chỉ đạo /test

/1/a
c

Lưu trữ test.tar

/1/b
d

có thể sẽ được hợp nhất để:

/1/a
/1/b
c
d

Thêm -kcờ vào lệnh tar sẽ đảm bảo không có tệp nào trong thư mục đích của bạn bị ghi đè:

tar -xvkf test.tar

@BP: Ghi đè có thể phụ thuộc shell vì csh (vẫn là shell mặc định trên Sun?) Có biến shell "noclobber" mà khi được đặt sẽ ngăn hành vi ghi đè ngẫu nhiên.
hotei

Cảm ơn BloodPhilia và hotei. Tôi đã thực hiện một thử nghiệm trên hệ thống của mình và tar -xvf ghi đè lên các tệp đã tồn tại và thêm các tệp không tồn tại. Những gì tôi muốn biết là nếu có bất kỳ khả năng nào thì toàn bộ thư mục sẽ bị ghi đè và do đó làm mất các tệp trên hệ thống của tôi trong thư mục đó nhưng không có trong kho lưu trữ? Ví dụ: Tôi có trong dir.tar dir / file2. Trên hệ thống của tôi, tôi có dir / file1, dir / file2 và dir / file3. Có thể là nếu tôi thực hiện tar -xvf dir.tar thì toàn bộ thư mục sẽ bị ghi đè và sẽ không còn chứa file1 và file3 nữa?
Felicia

@hotei: noclobber(cũng tồn tại trong vỏ POSIX btw) chỉ ảnh hưởng đến các tệp được chuyển hướng đến >footrong vỏ. Nó không có tác dụng trên tar.
Gilles 'SO- ngừng trở nên xấu xa'

@hotei noclobber ngăn bạn ghi đè các tệp thông qua chuyển hướng trong trình bao. Vì vậy, echo foo > bar.txtsẽ không ghi đè lên bar.txt nếu nó tồn tại. Nó không có tác dụng đối với những gì một chương trình, chẳng hạn như tar, sẽ ghi đè lên.
KeithB

1
@Felicia: Theo Single Unix, tar sẽ không xóa các tệp không có trong kho lưu trữ. Nó sẽ ghi đè lên các tệp hiện có với nội dung (nhưng không phải các chế độ) từ kho lưu trữ. Có thể có các tars không tuân thủ xung quanh, nhưng tôi nghi ngờ bất kỳ ai trong số họ sẽ ghi đè lên các tệp không liên quan như dir/file1.
Gilles 'SO- ngừng trở nên xấu xa'

0

Cách dễ nhất là tạo một thư mục mới, trống, cd vào đó và giải nén các tệp ở đó. Bạn cần cẩn thận mặc dù các tệp được trích xuất là tương đối (bắt đầu bằng ./) và không tuyệt đối (bắt đầu bằng /). Chuyển mục lục qua ít hơn để xem trường hợp nào nếu bạn không biết (tar -tvf tar_filename | less)

Bạn có thể tìm hiểu xem phiên bản tar của bạn có ghi đè theo mặc định hay không bằng cách xem trang người đàn ông. Tar sẽ không xóa các tệp trong quá trình trích xuất, đó là một lý do khác mà mọi người thường bắt đầu từ một thư mục mới, trống trước khi thực hiện trích xuất.

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.