我想将大文件从一台计算机安全地移动到另一台计算机,在存储之前必须对其进行处理。
我想将文件通过管道传输到运行处理脚本的 ssh 中。
local.example.com$ cat file | ssh remote.example.com process.sh
Run Code Online (Sandbox Code Playgroud)
(如果您有比我更好的想法,请提出)
在处理脚本中,我想在保存文件之前对文件进行校验和加密。问题来了。
解决方案可能有两种:
hack cksum 也可以做类似猫的工作并在 stderr 上打印结果,这样我就可以做
cksum --pipe | openssl enc > myfile
Run Code Online (Sandbox Code Playgroud)
并通过 stderr 返回校验和。不幸的是,我查看了代码,似乎很难在不造成性能/缓冲损坏的情况下做到这一点;)
可能有一个 cksumming-transfer 工具可以完成这一切,但我没有想到。无论如何,我想避免非标准和复杂的东西。
多谢。
编辑:关于答案的有用链接http://www.linuxjournal.com/content/shell-process-redirection
据我了解,TCP 有一个相对可靠的校验和机制,但返回误报的可能性很小。
HTTP 是否使用应用程序级校验和(可能是哈希值)?如果没有,为什么?
我们有一个 150 Gb 的数据文件夹。其中,文件内容可以是任何格式(doc、jpg、png、txt 等)。我们需要相互检查所有文件内容以检查是否有重复的文件内容。如果是,则打印文件路径名列表。为此,我首先使用ArrayList<File>
存储所有文件,然后使用FileUtils.contentEquals(file1, file2)
方法。当我尝试处理少量文件(文件夹)时,它可以工作,但是对于这个 150Gb 数据文件夹,它没有显示任何结果。我认为首先将所有文件存储在 ArrayList 中会产生问题。JVM 堆问题,我不确定。
任何人都有更好的建议和示例代码来处理如此大量的数据?请帮我。
我已使用 AzCopy 实用程序将一个大型 zip 存档上传到 Azure 存储 BLOB 容器(约 9GB)。现在我想检查它是否正确。我可以从 Azure 门户获取文件的“CONTENT-MD5”值。然后我需要在我这边计算这个,对吗?有没有其他方法来检查有效性(除了下载这个文件)?它是使用 7zip 实用程序存档的,该实用程序没有用于 MD5 的哈希算法。
我希望能够根据本地目录中的文件列表进行校验和。然后能够获取这些文件校验和并将其与远程系统上相同文件的校验和进行比较。
我知道我可以通过以下方式获得
# Local File
- stat:
path: "{{ playbook_dir }}/roles/common/files/myfile.dat"
checksum_algorithm: sha1
delegate_to: localhost
run_once: true
register: localsha_result
# Remote file
- stat:
path: "{{ rmt_dest_dir }}/myfile.dat"
checksum_algorithm: sha1
register: sha_result
Run Code Online (Sandbox Code Playgroud)
我试图遍历我想要校验和的文件:
# Gather Files
- name: gather names of files
local_action: shell ls {{ playbook_dir }}/roles/common/files/*.dat | awk -F '/' '{ print $NF }'
register: datfiles
# Local File
- stat:
path: "{{ playbook_dir }}/roles/common/files/{{ item }}"
checksum_algorithm: sha1
with_items: "{{ datfiles.stdout_lines }}"
delegate_to: localhost
run_once: true
register: …
Run Code Online (Sandbox Code Playgroud) 有一种场景,我需要验证存储在 s3 存储桶中的文件的校验和(md5)。这可以在上传文件时通过在 api 调用的元数据中指定校验和值来实现。但就我而言,我想在以编程方式将数据放入存储桶后验证校验和。S3 中的每个对象都有一个名为“ETag”的属性,它是 S3 计算的 md5 校验和。
无论如何要获取特定对象的 ETag 并在 python 脚本中使用 boto3 客户端比较存储在 s3 中的本地文件和文件的校验和?
假设您有一个文件夹,其中包含可能包含不同信息的成百上千个.csv
或.txt
文件,但您想确保它joe041.txt
实际上不包含joe526.txt
意外的相同数据。
与其将所有内容都加载到一个文件中(如果每个文件都有数千行,这可能会很麻烦),我已经开始使用 Python 脚本来基本上读取目录中的每个文件并计算校验和,然后您可以在数千行之间进行比较的文件。
有没有更有效的方法来做到这一点?
即使使用filecmp
了,这似乎不太有效,因为模块只有文件VS文件和目录VS目录比较,但没有文件VS DIR命令-即使用它,这意味着你不得不遍历通过X ²次(所有文件dir
对所有中的其他文件dir
)。
import os
import hashlib
outputfile = []
for x in(os.listdir("D:/Testing/New folder")):
with open("D:/Testing/New folder/%s" % x, "rb") as openfile:
text=openfile.read()
outputfile.append(x)
outputfile.append(",")
outputfile.append(hashlib.md5(text).hexdigest())
outputfile.append("\n")
print(outputfile)
with open("D:/Testing/New folder/output.csv","w") as openfile:
for x in outputfile:
openfile.write(x)
Run Code Online (Sandbox Code Playgroud) 我想计算校验和。我对 crc 的预期答案是 0xE1 但是当我运行这段代码时它返回 0。我没有得到任何解决方案来做到这一点。请帮我解决这个问题。下面是我试过的代码。
我的视图控制器:
class ViewController: UIViewController {
var checkSum:UInt8 = 0
override func viewDidLoad() {
super.viewDidLoad()
let bytes = [0x01,0x0B,0x00,0x0B,0x03,0x07,0x12,0x0E,0x0C,0x10,0x09,0x12,0x0C,0x19,0x09,0xFF,0x14]
for item in bytes {
print(calculateCheckSum(crc: checkSum, byteValue: UInt8(item)))
}
}
func calculateCheckSum(crc:UInt8, byteValue: UInt8) -> UInt8 {
let generator = 0x1D
checkSum = crc ^ byteValue
for _ in 1...8 {
if (crc & 0x80 != 0) {
checkSum = (crc << 1) ^ UInt8(Int8(generator))
}
else {
checkSum <<= UInt8(1)
}
}
return crc …
Run Code Online (Sandbox Code Playgroud) 我正在尝试比较本地和远程文件 MD5 哈希(我在 wamp“www”目录中复制/粘贴的同一个文件),但我不明白为什么“校验和”不对应......
这是校验和代码:
#-*- coding: utf-8 -*-
import hashlib
import requests
def md5Checksum(filePath,url):
if url==None:
with open(filePath, 'rb') as fh:
m = hashlib.md5()
while True:
data = fh.read(8192)
if not data:
break
m.update(data)
return m.hexdigest()
else:
r = requests.get(url, stream=True)
m = hashlib.md5()
for line in r.iter_lines():
m.update(line)
return m.hexdigest()
print "checksum_local :",md5Checksum("projectg715gb.pak",None)
print "checksum_remote :",md5Checksum(None,"http://testpangya.ddns.net/projectg715gb.pak")
Run Code Online (Sandbox Code Playgroud)
我很惊讶得到这个输出:
checksum_local : 9d33806fdebcb91c3d7bfee7cfbe4ad7
checksum_remote : a13aaeb99eb020a0bc8247685c274e7d
Run Code Online (Sandbox Code Playgroud)
“projectg715gb.pak”的大小为14.7Mb
但是,如果我尝试使用文本文件(大小为 1Kb):
print "checksum_local :",md5Checksum("toto.txt",None)
print "checksum_remote :",md5Checksum(None,"http://testpangya.ddns.net/toto.txt")
Run Code Online (Sandbox Code Playgroud)
然后它工作oO我得到这个输出:
checksum_local : f71dbe52628a3f83a77ab494817525c6
checksum_remote : …
Run Code Online (Sandbox Code Playgroud) 如果我在 ETH 和 RSK 网络中导入相同的私钥,则帐户相同但大小写不同。为什么是这样?这个可以吗?