2016-08-18 88 views
0

比方说,我有一个文件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....) 

,但不起作用。

回答

1

只需使用执行命令$()而不需要使用进程替换。这将在某种程度上被执行的命令的输出将只是"Endesa"之后放置:

mv abc.pdf "Endesa""$(your command)" 

比如我刚刚通过运行touch "Endesa"$(date "+%s")".pdf"创建的文件Endesa1471530429.pdf在我的电脑。

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

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

啊,好的!所以'f = abc; mv $ f.pdf“Endesa $(pdftotext -raw $ f.pdf - ...)。pdf”' - **它的工作原理!** –

+1

@ Ze'ev yep!尽管习惯于引用事物是很好的,所以说'mv'$ f“...',以防万一名称包含一些空格。 – fedorqui

1

就这么简单:

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

尝试这样;使用变量

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