linux - shell 脚本上的不明确重定向

标签 linux bash parsing redirect

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

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

控制台:cat 文件名 | pv -s FILE_SIZE -e -r -p > 目标路径/文件名

在我的 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,但我只想要大小。 这意味着第一行的返回值实际上是:

FILE_SIZE

12345

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

提前致谢。

最佳答案

如果我理解正确的话:

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

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

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

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

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

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

关于linux - shell 脚本上的不明确重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15425950/

相关文章:

c++ - 从字符数组中解析文件名

json - Flutter:从json列表中获取数据

linux - Bash - 显示带有网络接口(interface)作为选项的菜单

c -/proc/partitions 主要和次要编号以检测物理磁盘和分区

用于检索唯一单词并与标点符号一起计数的 Linux 命令

linux - Emacs shell 模式 SSH session 中的 Tab 补全

linux - 在 MS Azure 中运行 ubuntu 云镜像

json - 检查结果是否为空字符串

bash - 如何创建一个空的 tgz 文件?

c# - 解析 Quickbook IIF 格式文件