2016-08-18 148 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"