0

我试图创建一个小 shell 脚本,以便在将大文件从笔记本电脑的硬盘复制到外部驱动器时检查传输进度。从命令行来看,这是一个使用 pv 和简单重定向的简单壮举,尽管该行相当长并且您必须知道文件大小(这就是我想要脚本的原因):

控制台:du 文件名(获取确切的文件大小)

控制台:猫文件名 | pv -s FILE_SIZE -e -r -p > dest_path/文件名

在我的 shell 脚本中,我添加了egrep "[0-9]{1,}" -o以去除文件名并仅保留 du 的返回值中的大小数字,其余的应该很简单。

#!/bin/bash
du $1 | egrep "[0-9]{1,}" -o
sudo cat $1 | pv -s $? -e -r -p > $2/$1

问题是当我尝试使用它复制 file12345.mp3 时,我得到一个不明确的重定向错误,因为 egrep 从文件名中获取 12345,但我只想要大小。这意味着第一行的返回值实际上是:

文件大小

12345

哪个错误。我应该如何修改此脚本以仅解析第一个数字,直到第一个“”(空格)?

提前致谢。

4

1 回答 1

0

如果我理解正确:

要仅保留 du 命令输出中的文件大小:

du $1 | awk '{print $1}'

(假设第一个字段是文件的大小)

在重定向中添加双引号以避免错误:

sudo cat $1 | pv -s $? -e -r -p > "$2/$1"

$2由于您包含空格,因此已完成此引用。

于 2013-03-15T06:22:24.017 回答