在Linux中,我有一个相当大的文件,其中包含一些无关的信息.比方说,我知道在1.6GB文件的末尾有314个字节的无关数据.
当然,将更多数据添加到文件末尾是非常容易和有效的,但是我可以做什么来删除它而不必将该文件的第一部分复制到另一部分(或覆盖所述文件)?
编辑
我在C中看到了一些很好的建议.我希望从命令行编写脚本,但如果没有,我会更倾向于在python中执行它而不是C.
我看到python在其文件对象上有一个truncate方法,但无论我如何使用它,它似乎都在拆除我的文件 - 我应该能够解决这个问题,但当然答案仍然非常受欢迎.
Kev*_*imm 28
使用该功能 truncate
http://linux.die.net/man/2/truncate
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
Run Code Online (Sandbox Code Playgroud)
truncate采用文件名
ftruncate采用打开的文件描述符
这两个都设置文件长度,length以便它截断或延长(在后一种情况下,文件的其余部分将填充NULL/ZERO)
[edit]
truncate(linux shell命令)也可以
**SYNTAX**
truncate -s integer <filename>
**OPTIONS**
-s number specify the new file length. If the new length is smaller than the current filelength data is lost. If the new length is greater the file is padded with 0. You can specify a magnitude character to ease large numbers:
b or B size is bytes.
k size is 1000 bytes.
K size is 1024 bytes.
m size is 10^6 bytes.
M size is 1024^2 bytes.
g size is 10^9 bytes.
G size is 1024^3 bytes.
**EXAMPLES**
To shrink a file to 10 bytes:
truncate -s 10 /tmp/foo
To enlarge or shrink a file to 345 Megabytes:
truncate -s 345M /tmp/foo
Run Code Online (Sandbox Code Playgroud)
[/编辑]
she*_*lbc 16
尽管truncate在这个帖子中有很多对函数的引用,但是没有人真正回答OP关于从脚本环境中减少固定数量的文件的问题.Kevin的答案用于truncate将目标文件的大小调整为固定数量,但当然这个解决方案的正确性要求用户首先知道目标文件的大小减去最后的无关数据.所以,我们有:
Run Code Online (Sandbox Code Playgroud)-s, --size=SIZE set or adjust the file size by SIZE bytes
Truncate实际上支持通过在SIZE前加上一个-字符来直接从目标文件的末尾删除数据.
例如,要将文件大小调整为314个字节,您可以执行以下操作:
truncate --size=-314 target_file.bin
小智 5
使用“截断”是最好的方法,我只发布一些示例:
我有一个文件“ PNav-h.db”,它具有50176个字节。
-rw-r--r-- 1 user user 50176 Mar 8 23:43 PNav-h.db
$truncate -s 1000 PNav-h.db
Run Code Online (Sandbox Code Playgroud)
它将文件大小设置为1000 byptes
-rw-r--r-- 1 user user 1000 Mar 9 00:02 PNav-h.db
Run Code Online (Sandbox Code Playgroud)对于您的情况,请使用$truncate --size=xxx xxfilename,-<size number>以减小文件大小
$truncate --size=-300 PNav-h.db
-rw-r--r-- 1 user user 700 Mar 9 00:07 PNav-h.db
Run Code Online (Sandbox Code Playgroud)
最终文件大小= 1000-300 = 700
通过+<size number>增加文件大小
$truncate --size=+500 PNav-h.db
-rw-r--r-- 1 user user 1200 Mar 9 00:09 PNav-h.db
Run Code Online (Sandbox Code Playgroud)
最终文件大小= 700 + 500 = 1200
如果没有-或+,则设置文件大小。
$truncate --size=60000 PNav-h.db
-rw-r--r-- 1 user user 60000 Mar 9 00:12 PNav-h.db
Run Code Online (Sandbox Code Playgroud)
最终文件大小设置为60000