'Tar' kết quả của một 'tìm', bảo vệ cấu trúc thư mục


7

Tôi muốn tar tất cả các tệp * .txt mà tôi nhận được là kết quả của lệnh find , tồn tại trong một thư mục có cấu trúc cây như thế này:

  • Tên thư mục
    • dir1
      • file1.pdf
      • file1.txt
    • dir2
      • file2.pdf
      • file2.txt
    • dir3
      • file3.pdf
      • file3.txt

(tên tệp chỉ là ví dụ).

Nhưng tôi muốn bảo tồn cấu trúc thư mục .

Lệnh nào có thể cho tôi một tệp tar.gz với nội dung này?

  • dir1
    • file1.txt
  • dir2
    • file2.txt
  • dir3
    • file3.txt

Câu trả lời:


12

Bạn có thể sử dụng xargsđể cung cấp đầu ra của lệnh làm đối số cho lệnh khác:

find . -iname '*.txt' -print0 | xargs -0 tar zcvf the_tarball.tar.gz

Lưu ý ở đây, -print0từ find và -0from xargs hoạt động cùng nhau để phân định tên tệp một cách chính xác (để tên có khoảng trắng và như vậy không phải là vấn đề).


6
xargs thậm chí không cần thiết, bạn có thể dẫn đầu ra của find trực tiếp đến tar thông qua stdin. Ví dụ của bạn: find . -iname '*.txt' | tar zcvf the_tarball.tar.gz --files-from -Giải thích tại đây: stackoverflow.com/a/9534272/4017010 và chủ đề chung đã được thảo luận ở đây: unix.stackexchange.com/questions/5641/iêu
doktor5000

Xin chào, điều này đã làm việc hoàn hảo. Và cảm ơn doktor5000 vì sự chính xác :)
Kamafeather
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.