Có lẽ có một mẹo đơn giản để làm điều này, nhưng tôi không thể tìm ra từ trang nam.
Làm cách nào để tôi cắt 1MB cuối cùng từ tệp với kích thước không xác định, chẳng hạn, bằng cách sử dụng dd
?
Có lẽ có một mẹo đơn giản để làm điều này, nhưng tôi không thể tìm ra từ trang nam.
Làm cách nào để tôi cắt 1MB cuối cùng từ tệp với kích thước không xác định, chẳng hạn, bằng cách sử dụng dd
?
Câu trả lời:
Chà, giả sử bạn có stat
và bash
, bạn có thể lấy kích thước tệp bằng:
stat -c %s your_file
Nếu bạn muốn trích xuất các $amount
byte cuối cùng cho tệp đó dd
, bạn có thể:
dd if=your_file of=extracted_part \
bs=1 count=$amount \
skip=$(( $(stat -c %s your_file) - $amount ))
Nhưng phương pháp saner sẽ được sử dụng tail
:
tail -c $(( 1024*1024 )) your_file > target_file
-c
lựa chọn cho head
?
dd - giúp đỡ Cách sử dụng: dd [OPERAND] ... hoặc: dd TÙY CHỌN Sao chép một tập tin, chuyển đổi và định dạng theo toán hạng. bs = BYTES đọc và ghi byte BYTES tại một thời điểm (cũng xem ibs =, obs =) cbs = BYTES chuyển đổi byte BYTES tại một thời điểm conv = CONVS chuyển đổi tệp theo danh sách ký hiệu được phân tách bằng dấu phẩy đếm = BLOCKS chỉ sao chép các khối đầu vào BLOCKS ibs = BYTES đọc byte BYTES tại một thời điểm (mặc định: 512) if = FILE đọc từ FILE thay vì stdin iflag = FLAGS đọc theo danh sách ký hiệu được phân tách bằng dấu phẩy obs = BYTES ghi byte BYTES tại một thời điểm (mặc định: 512) of = FILE ghi vào FILE thay vì stdout oflag = FLAGS viết theo danh sách ký hiệu được phân tách bằng dấu phẩy tìm kiếm = BLOCKS bỏ qua các khối có kích thước quan sát BLOCKS khi bắt đầu xuất Skip = BLOCKS bỏ qua các khối có kích thước ibs BLOCK khi bắt đầu nhập status = noxfer đàn áp thống kê chuyển BLOCKS và BYTES có thể được theo sau bởi các hậu tố nhân sau: c = 1, w = 2, b = 512, kB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024, xM = M GB = 1000 * 1000 * 1000, G = 1024 * 1024 * 1024, v.v. đối với T, P, E, Z, Y.
Nếu kích thước tệp chính xác là 10MB, 1024 * 10 10240K Điều này sẽ để lại 1024K cuối cùng. Bạn nên chỉ định kích thước khối bạn đang làm việc bằng cách sử dụng các tùy chọn ibs và obs.
1M = 1024K
1024*9 = 9216
dd if=/10/MB/file of=/9/MB/file count=9216K ibs=1K obs=1K
dd if=/10/MB/file of=/9/MB/file count=9M ibs=1M obs=1M
Bạn cũng có thể bỏ qua 1MB đầu tiên của tệp, sử dụng tùy chọn bỏ qua để đọc đến cuối tệp bỏ qua 1 MB đầu tiên.
dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M
Sử dụng tùy chọn tìm kiếm, bạn có thể viết một vị trí cụ thể trong tệp đầu ra của mình. Giả sử bạn muốn giữ 1MB đầu tiên và ghi lại 8 MB cuối cùng.
dd if=/10/MB/file of=/9/MB/file skip=1M seek=1M count=8M ibs=1M obs=1M
Bạn có thể cần nhận được một số chi tiết về kích thước tệp của mình để đảm bảo bạn nhận được đúng lượng dữ liệu vào và ra.
ls -s --block-size 1K ./my/10MB/file
người đàn ông ls --block-size = KÍCH THƯỚC sử dụng các khối SIZE-byte. Xem định dạng KÍCH THƯỚC bên dưới -s, - kích thước in kích thước được phân bổ của mỗi tệp, trong các khối KÍCH THƯỚC có thể là (hoặc có thể là một số nguyên tùy ý theo sau) một trong số fol‐ mức thấp: KB 1000, K 1024, MB 1000 * 1000, M 1024 * 1024, v.v. P, E, Z, Y.