lệnh tar - bỏ qua các liên kết tượng trưng


13

Tôi sử dụng lệnh tar như,

tar -cvf protTests.tar protTests/*

cho tartất cả các tập tin trong thư mục , protTests. Nhưng điều này bao gồm các liên kết tượng trưng bên trong thư mục, đây không phải là một liên kết mong muốn.

Có một tùy chọn dòng lệnh, sẽ bỏ qua tất cả các liên kết tượng trưng?

Câu trả lời:


11

Bạn có thể làm điều này, để cung cấp tardanh sách tất cả các tệp bên trong protTestsngoại trừ những tệp có liên kết tượng trưng:

find protTests -maxdepth 1 -mindepth 1 -not -type l -print0 |
  tar --null --files-from - -cvf protTests.tar

Nhân tiện, lệnh hiện có của bạn:

tar -cvf protTests.tar protTests/*

sẽ không lưu trữ tất cả các tệp trong protTestsđó, nó sẽ chỉ lưu trữ những tên không bắt đầu bằng .(những tên không bị ẩn). Các *nhà điều hành glob bỏ qua các tập tin có tên bắt đầu bằng .bởi thiết kế. Lệnh cũng có vấn đề là nếu protTestscó nhiều tệp (hơn nhiều nghìn), thì protTests/*có thể mở rộng thành quá nhiều đối số để phù hợp với dòng lệnh.

Một lệnh đơn giản như thế này sẽ không có vấn đề nào trong số đó:

tar -cvf protTests.tar protTests

1
Tar không có tùy chọn --files-from, đây là một tùy chọn từ gtar, vì vậy, bạn đưa ra một lời khuyên như vậy, đề cập tốt hơn rằng đây là gtar cụ thể. Tìm không có chính -not, đây là một GNUism không di động. Nói chung, đó là một ý tưởng tồi để sử dụng một cuộc gọi tìm riêng biệt. Điều này có thể gây ra vấn đề với các ký tự vui nhộn trong tên tệp và nó chắc chắn cho hiệu suất thấp vì cả tìm và tar đều cần quét hệ thống tệp. Những vấn đề này không áp dụng cho các chương trình như ngôi sao sử dụng libfind và do đó có mã tìm kiếm được kết hợp.
schily

Hãy để tôi thêm một gợi ý chung khác: Khi đưa ra một lời khuyên dành riêng cho một biến thể cụ thể của nhà cung cấp chương trình UNIX, nên đề cập đến nhà cung cấp và đó là thông tin cụ thể của nhà cung cấp. Điều này thường có thể được thực hiện bằng cách sử dụng tên chính thức của phần mềm, ví dụ gtar thay vì tar, vim thay vì vi. Lưu ý rằng đây là một nền tảng thông tin liên quan đến UNIX, vì vậy, trong các ví dụ chung nên được căn chỉnh với tiêu chuẩn POSIX.
schily

Bạn nói đúng, @schily, đây là một giải pháp dành riêng cho GNU. Câu trả lời của bạn dựa trên starlà một lựa chọn tốt và tôi đã nâng cao nó vì lý do đó. Tôi cũng đồng ý với phản đối "nhân vật hài hước" nhưng vì GNU tarkhông có -0tùy chọn nên đó là sự đánh đổi. Tôi không đồng ý với phản đối hiệu suất, điều đó thực sự không có hậu quả trong tình huống này.
Celada

2
@schily, cả GNU tarbsdtar--files-from--nullloại bỏ sự cố với các ký tự vui nhộn (nếu được kết hợp với find's -print0hoặc -exec printf '%s\0' {} +). Nhưng ở đây, có lẽ bạn muốn thêm --no-recursiontùy chọn. Một số paxtriển khai cũng có một -0tùy chọn.
Stéphane Chazelas

2
@schily Tôi cảm thấy chủ đề bình luận này không phải là nơi để vận động cho các phiên bản khác nhau của tar. Hãy mang nó đến để trò chuyện . Nó đã quá dài và đọc như một cuộc chiến tôn giáo. Trừ khi chuông OP vào thời điểm này, tôi không nghĩ vấn đề là phiên bản nào tarđang được sử dụng. Chúng tôi thậm chí không biết họ đang sử dụng loại Unix nào.
Celada

-2

Thực hiện tar của tôi là phương pháp tốt nhất

star -cv -f out.tar -find protTests ! -type l

8
zsh: command not found: starKhi bạn đề cập đến các tiện ích mà bạn biết> 99% độc giả của bạn sẽ không có trên hệ thống của bạn, hãy giải thích nơi để có được chúng. Và bạn phải tiết lộ liên kết của bạn khi bạn đề cập đến sản phẩm của riêng bạn (cho dù bạn có đăng liên kết hay không, vì vậy bạn cũng có thể đăng liên kết).
Gilles 'SO- ngừng trở nên xấu xa'

Một hệ thống Linux điển hình ngày nay bỏ lỡ rất nhiều phần mềm quan trọng sau khi cài đặt mặc định và đồng thời, rất nhiều phần mềm vô dụng được cài đặt. Một người dùng Linux nên biết cách cài đặt phần mềm bị thiếu và những người thường xuyên sử dụng tar thường đã cài đặt sao.
schily

8
Phần lớn những người thường xuyên sử dụng tar chưa bao giờ nghe nói về pax, chứ đừng nói là sao.
Gilles 'SO- ngừng trở nên xấu xa'

Chà, những người không biết rằng họ đang sử dụng gtar trên Linux khi họ gọi "tar" có lẽ không phải là những người quan tâm. Star là triển khai tar miễn phí lâu đời nhất và nhiều tính năng được thấy trong các triển khai tar khác nhau đã được lấy từ sao, vậy tại sao không nói về bản gốc?
schily
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.