### 使用 `nc`(Netcat)上传和下载文件夹与文件

`nc`(Netcat)是一个功能强大的网络工具,可以用于创建 TCP/UDP 连接。在文件传输方面,它被广泛应用于上传和下载文件,甚至可以传输整个目录。

在使用 `nc` 上传和下载文件夹时,由于 nc 本身并不直接支持目录结构的传输,你需要借助一些额外的工具(如 tar`)来压缩目录,并通过 `nc 进行传输。以下是使用 nc 上传和下载文件和文件夹的详细方法。

### 1. 使用 `nc` 上传单个文件

#### 发送方(上传方):
cat filename | nc -lvp 4444

- `cat filename`:读取文件内容。
- `nc -lvp 4444`:在本地 `4444` 端口监听,等待接收数据。

#### 接收方(下载方):
nc 192.168.1.10 4444 > filename

- nc 192.168.1.10 4444`:连接到发送方的 IP(例如 `192.168.1.10`)的 `4444 端口。
- `> filename`:将接收到的数据写入本地文件。

### 2. 使用 `nc` 上传整个文件夹

由于 nc 不支持直接传输文件夹,你可以使用 tar 来打包整个文件夹,然后通过 nc 进行传输。

#### 发送方(上传方):
tar -czf - /path/to/directory | nc -lvp 4444

- tar -czf - /path/to/directory`:使用 `tar 压缩并打包文件夹内容,`-` 表示将压缩数据输出到标准输出。
- | nc -lvp 4444`:将压缩的文件通过 `nc 发送到目标机器。

#### 接收方(下载方):
nc 192.168.1.10 4444 | tar -xzf -

- nc 192.168.1.10 4444`:连接到发送方的 `4444 端口。
- `| tar -xzf -`:解压接收到的数据并恢复文件夹。

### 3. 使用 `nc` 上传和下载多个文件或目录(批量传输)

如果你需要批量传输多个文件或目录,依然可以利用 tar 来打包所有内容。

#### 发送方(上传方):
tar -czf - /path/to/dir1 /path/to/dir2 /path/to/file1 | nc -lvp 4444

- `tar -czf -`:打包多个文件和目录。
- `/path/to/dir1 /path/to/dir2 /path/to/file1`:指定多个文件和目录。
- | nc -lvp 4444`:通过 `nc 将打包内容发送给接收方。

#### 接收方(下载方):
nc 192.168.1.10 4444 | tar -xzf -

- `nc 192.168.1.10 4444`:连接到发送方的 IP 和端口。
- `| tar -xzf -`:解压接收到的内容并恢复文件夹结构。

### 4. 使用 `nc` 传输大文件时的注意事项

传输大文件时,`nc` 默认情况下不会提供进度反馈,因此你可能希望在传输过程中查看进度。你可以使用 `pv`(Pipe Viewer)来查看传输进度。

#### 发送方(上传方):
tar -czf - /path/to/directory | pv | nc -lvp 4444


#### 接收方(下载方):
nc 192.168.1.10 4444 | pv | tar -xzf -


### 5. 使用 `nc` 进行双向传输(文件和文件夹)

如果你想进行双向传输(既能上传文件又能下载文件),可以在两台机器上分别开启 nc 监听和连接。你需要确保每个命令在正确的机器上运行。

#### 发送方(上传方):
tar -czf - /path/to/directory | nc -lvp 4444


#### 接收方(下载方):
nc 192.168.1.10 4444 | tar -xzf -


### 总结

1. **单个文件**:可以直接使用 catnc 进行传输。
2. **文件夹**:使用 tar 打包文件夹后,通过 nc 传输。
3. **进度显示**:使用 pv 显示传输进度。
4. **批量传输**:打包多个文件或文件夹后进行传输。

nc 是一个非常强大的工具,结合其他工具(如 tarpv`),可以方便地用于文件夹的上传和下载。虽然它不像 `scprsync 那样内建加密和验证,但它在某些环境中依然是一个非常高效且简单的选择。

#nc #文件传输 #tar #Linux #网络工具
 
 
Back to Top