Linux shell脚本上的不明确重定向

Linux shell脚本上的不明确重定向,linux,bash,parsing,redirect,Linux,Bash,Parsing,Redirect,我试图创建一个小shell脚本,在将大型文件从笔记本硬盘复制到外部驱动器时,它允许我检查传输进度。 从命令行来看,这是一个使用pv和简单重定向的简单壮举,尽管行相当长,您必须知道文件大小(这就是我想要脚本的原因): 控制台:du文件名(获取确切的文件大小) 控制台:cat filename | pv-s FILE_SIZE-e-r-p>dest_path/filename 在我的shell脚本中,我添加了egrep“[0-9]{1,}”-o来去除文件名,并只保留du返回值中的大小数字,其余的应该

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

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

控制台:cat filename | pv-s FILE_SIZE-e-r-p>dest_path/filename

在我的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

这让它讨厌。 我应该如何修改此脚本以仅解析第一个数字,直到第一个“”(空格)


提前谢谢。

如果我理解正确:

要仅保留du命令输出中的文件大小,请执行以下操作:

du $1 | awk '{print $1}'
(假设第一个字段是文件的大小)

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

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

由于您的
$2
包含空格,所以执行了此引用。

这在命令行上确实有效(只返回数字),但我仍然使用以下命令获得了一个不明确的重定向:pcopy NA-495-2013-03-14-Final.mp3/media/segate\Expansion\Drive/(仅供参考,pcopy是脚本名称)(编辑:也获得不带最后斜杠的不明确重定向)你能告诉我们你是如何运行脚本的吗?我想特别看看参数是如何传递给脚本的?如果将其分解为步骤会发生什么。例如,使用Guru的代码片段查找块大小。静态地把它放在第二行。它在硬编码时工作吗?正如我在最后一条评论中所显示的:pcopy filename.ext dest_path@PaulCalabro您的意思是将Guru代码段的返回值保存在一个变量上,然后在cat/pv命令或其他命令中使用该变量?我是bash编程新手。。。