ฉันต้องการเพิ่ม 8 ไบต์ของข้อมูลไปยังจุดเริ่มต้นของไฟล์ไบนารี
มีคำสั่ง Linux สำหรับสิ่งนี้หรือไม่?
ฉันต้องการเพิ่ม 8 ไบต์ของข้อมูลไปยังจุดเริ่มต้นของไฟล์ไบนารี
มีคำสั่ง Linux สำหรับสิ่งนี้หรือไม่?
คำตอบ:
นี่คือวิธีหนึ่งในการทำเช่นนั้น
printf "\x68\x65\x6c\x6c\x6f\x20\x77\x6f" | cat - oldfile > newfile
อาร์กิวเมนต์printf
เป็นลำดับ 8 ไบต์ในฐานสิบหก เพียงแทนที่ค่าที่ฉันใช้ (ซึ่งเป็นอักขระ ASCII "hello wo") ด้วยของคุณ
btrfs
มีเคอร์เนลที่กำหนดเอง?
มันไม่ได้เป็นคำสั่ง 'มันเป็น' พวงของคำสั่ง '(ในประเพณียูนิกซ์เก่าดี):
หรือ:
% echo -n "12345689" > new_file
% cat original >> new_file
% mv new_file original
หรือถ้าคุณต้องการอ่าน 8 ไบต์จากที่อื่น:
% dd if=inputstream of=new_file bs=1 count=8
จากนั้นดำเนินการต่อตามด้านบน
นี่ไม่ใช่คำตอบที่ถูกต้องสำหรับคำถามต้นฉบับ แต่เป็นเพียงความคิดเห็นเพื่อตอบข้อกังวลที่เหมาะสมในข้อคิดเห็นของ @mxmlnkn
ดังนั้นฉันจำเป็นต้องเพิ่ม 256kB เป็นไฟล์ 120GB และฉันไม่ต้องการรอ 30 นาทีเพื่อคัดลอกและเขียนทั้ง 120GB อย่างสมบูรณ์ ... ไม่มีทางเลยเหรอ?
ค้นหาเว็บสำหรับ 'fallocate prepend to file' ซึ่งจะแสดงคำตอบที่ใช้ StackExchange (EDIT: เช่นhttps://stackoverflow.com/a/37884191/9378469 )
วิธี fallocate ที่ให้ Linux 4.1+ (XFS) หรือ 4.2+ (XFS, ext4) ช่วยให้คุณสามารถแทรกรูขนาดของระบบไฟล์ในหน้าไฟล์หวังว่าในเวลาคงที่ สิ่งนี้อาจหรืออาจไม่ยืดหยุ่นพอสำหรับปัญหาของคุณ
ทดสอบใน cygwin ควรทำงานบน linux
ใช้ xxd และ sed
ในหนึ่งบรรทัด
$ xxd -p a.a | sed 's/^/6162636465/' | xxd -r -p > a2.a
พังทลาย
display a.a
$ cat a.a
abc
look at the hex of a.a
user@comp ~
$ xxd -p a.a
6162630a
ไฟล์นี้มีบรรทัดใหม่ในท้ายที่สุดตามที่ xxd แสดงอยู่ด้านบน
ดูว่ามีกี่บรรทัดที่ xxd -p พิมพ์ .. จะมีเพียงหนึ่งบรรทัดเท่านั้นโดยไม่คำนึงถึงไฟล์ที่ได้รับเนื่องจากตัวละครทั้งหมดในไฟล์จะเปลี่ยนเป็นเลขฐานสิบหกและจะพิมพ์จริง \ n เมื่อสิ้นสุดสิ่งที่ทิ้งไว้ (ซึ่งคุณจะเห็นว่าคุณทำ xxd -p aa | xxd -p)
$ xxd -p a.a | wc -l
1
sed ทำงานในแต่ละบรรทัดและเมื่อป้อน xxd -p, sed จะต้องป้อนข้อมูลเพียงบรรทัดเดียวเท่านั้นจึงง่ายมาก
user@comp ~
$ xxd -p a.a | sed 's/^/6162636465/'
61626364656162630a
user@comp ~
$ xxd -p a.a | sed 's/^/6162636465/' | xxd -r -p > a2.a
user@comp ~
$ xxd -p a2.a
61626364656162630a
user@comp ~
$ cat a2.a
abcdeabc
user@comp ~
$