Bash 如何重命名为命令输出?

Bash 如何重命名为命令输出?,bash,mv,Bash,Mv,假设我有一个文件abc.pdf 我想将其重命名为Endesa+此命令的输出: pdftotext -raw abc.pdf - | grep 'Periodo de consumo' | sed -E 's_.*: ([0-9]{2})/([0-9]{2})/([0-9]{4}) a ([0-9]{2})/([0-9]{2})/([0-9]{4})_\3-\2-\1 \6-\5-\4_g' 例如,Endesa 2016-07-12 2016-08-09.pdf 我可以用一行程序来完成这项工作,

假设我有一个文件
abc.pdf

我想将其重命名为
Endesa
+此命令的输出:

pdftotext -raw abc.pdf - | grep 'Periodo de consumo' | sed -E 's_.*: ([0-9]{2})/([0-9]{2})/([0-9]{4}) a ([0-9]{2})/([0-9]{2})/([0-9]{4})_\3-\2-\1 \6-\5-\4_g'
例如,
Endesa 2016-07-12 2016-08-09.pdf

我可以用一行程序来完成这项工作,而不必键入两次文件名吗

我试过了

mv abd.pdf < "Endesa "$(pdftotext....)
mv abd.pdf<“Endesa”$(pdftotext…)

但是这不起作用。

只需使用
$()
执行命令,而无需使用进程替换。这将以一种方式执行,即命令的输出将放置在
“Endesa”
之后:

例如,我刚刚通过运行
触摸“Endesa”$(日期“+%s”).pdf”
在我的计算机中创建了一个文件
Endesa1471530429.pdf

由于
pdftotext
的参数是文件本身,您可以通过将值存储在变量中并使用两次来节省时间:

mv "$your_file" "Endesa""$(pdftotext -raw "$your_file" - | grep ...)"

只需使用
$()
执行命令,而无需使用进程替换。这将以一种方式执行,即命令的输出将放置在
“Endesa”
之后:

例如,我刚刚通过运行
触摸“Endesa”$(日期“+%s”).pdf”
在我的计算机中创建了一个文件
Endesa1471530429.pdf

由于
pdftotext
的参数是文件本身,您可以通过将值存储在变量中并使用两次来节省时间:

mv "$your_file" "Endesa""$(pdftotext -raw "$your_file" - | grep ...)"
简单到:

mv abd.pdf "Endesa $(pdftotext....)"
简单到:

mv abd.pdf "Endesa $(pdftotext....)"

像这样尝试;使用变量

NEWNAME=$(pdftotext....) ; mv abc.pdf "Endesa $NEWNAME"

像这样尝试;使用变量

NEWNAME=$(pdftotext....) ; mv abc.pdf "Endesa $NEWNAME"

啊,好的!So
f=abc;mv$f.pdf“Endesa$(pdftotext-raw$f.pdf-…).pdf”
-它可以工作@泽维耶!虽然习惯于引用东西是很好的,所以说
mv“$f”…
,以防万一名称中包含一些空格。啊,好的!So
f=abc;mv$f.pdf“Endesa$(pdftotext-raw$f.pdf-…).pdf”
-它可以工作@泽维耶!尽管习惯于引用一些东西是很好的,所以说
mv“$f”…
,以防万一名称中包含一些空格。