Khi bạn viết:
tar -xf *.gz
lệnh tar
thấy (ví dụ):
tar -xf abc.tar.gz def.tar.gz ghi.tar.gz
này được hiểu như là một yêu cầu để trích xuất def.tar.gz
và ghi.tar.gz
từ kho lưu trữ abc.tar.gz
. Vì các tệp không có trong đó, bạn nhận được thông báo cảnh báo.
Nói cách khác, tar
hoạt động trên một tệp tar
duy nhất (có thể được nén) tại một thời điểm (trong một lần gọi). Nó không hoạt động trên nhiều tập tin tar.
Lưu ý rằng nếu abc.tar.gz
chứa một tập tin pqr/xyz/important.c
, bạn có thể trích xuất chỉ là một tập tin bằng cách xác định:
tar -xf abc.tar.gz pqr/xyz/important.c
Ký hiệu bạn sử dụng chỉ là một biến thể trên ký hiệu này.
(Và có, có thể có lý do để tar
một tệp tar
. Ví dụ: Gmail không cho phép bạn gửi tệp tar hoặc tệp tar gzipped chứa tệp thực thi. Tuy nhiên, nếu bạn nhúng gzipped tar tập tin bên trong một tập tin tar không nén, nó không nhìn bên trong tập tin bên trong để tìm tập tin thực thi. Tôi sử dụng này khi tôi cần phải gửi một tập tin tar với một tập lệnh thực thi configure
.)
Nguồn
2013-06-05 06:57:30
nó được gây ra bởi thực tế là cú pháp lập luận của tar chấp nhận chỉ một tar đơn trong dòng lệnh và phần còn lại được hiểu là một thứ khác. Bạn cũng có thể sử dụng xargs ('ls * .gz | xargs -n1 tar -xzf' hoặc giống nhau). – ShinTakezou
tar không chấp nhận mẫu glob làm đối số (nghĩa là nó sẽ không diễn giải nó) afaik – ShinTakezou
@ShinTakezou: nhưng vỏ sẽ mở rộng ký hiệu '* .gz'; 'tar' sẽ không (thường) xem' * .gz'. Đôi khi, bạn muốn trích xuất các tệp có '*' trong tên. Ví dụ: 'tar -xf abc.tar.gz 'src/prog/* name. *'' Sẽ trích xuất các tệp như 'src/prog/bigname.c',' src/prog/smallname.h'; các dấu nháy đơn ngăn cản trình bao mở rộng '*' và 'tar' thực sự mở rộng nó. –