我编写了一个非常基本的脚本,让我可以使用 URL 下载文件。这是我的脚本:
#!/bin/sh
# A script that downloads a file based on url
function filedl() {
echo "What is the url for the file?"
read FILEURL
wget $FILEURL
echo "Download complete"
}
filedl
我希望能够做的是在下载文件后立即定位下载的文件,并使用脚本中的其他命令或函数自动将其移动到预定义的目录。
我已经阅读了一些有关如何将输出通过管道传输到变量的线程,但我无法弄清楚如何使用我的脚本来做到这一点。这些是我读过的主题:
- shell 脚本 - 如何将程序或函数的输出通过管道传输到变量中? - Unix 和 Linux 堆栈交换
- shell script - 将命令输出分配给变量会产生奇怪的结果 - 智库101 - 一个基于CC版权的问答分享平台
- bash - 如何将输出重定向到 shell 中的变量? - 堆栈溢出
我尝试使用类似以下内容创建一个新变量,但它似乎不起作用:
NEWFILE=$(wget $FILEURL)
我还尝试了对函数调用进行修改的脚本变体:
NEWFILE=$(filedl)
<-- 这似乎也没有做任何事情。
最后,我将命令移出了函数,并仅列出了每个命令以及上面描述的变量定义尝试的变体。我仍然不知道该怎么做。
我对 shell 脚本还很陌生,所以如果我遗漏了一些应该很明显的东西,我深表歉意。
答案1
不要将文件捕获在变量中,不必要地将整个文件放入内存中,而是使用wget
's --output-document
/-O
标志和以下两个变体之一:
wget -O /path/to/file ... http://example.com/foobar
wget -O - ... http://example.com/foobar > /path/to/file
.../path/to/file
您想要的任何路径+文件名在哪里。 (并且...
仅代表您可能使用的任何其他标志或参数。)
或者,如果您想保留下载文件的默认名称,请使用--directory-prefix
或-P
并仅指定文件应保存到的目录。
wget -P /some/path ... http://example.com/foobar