2016-08-18 2 views
0

Sagen wir, ich habe eine Datei abc.pdfWie in Befehlsausgabe umbenennen?

ich es Endesa umbenennen möchten + die Ausgabe dieses Befehls:

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' 

Ie, Endesa 2016-07-12 2016-08-09.pdf

Kann ich dies mit einem Einzeiler , ohne den Namen der Datei zweimal eingeben zu müssen?

Ich versuchte

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

aber das funktioniert nicht.

Antwort

1

Verwenden Sie einfach den Befehl mit $() ausführen, ohne Prozessvertretung verwenden zu müssen. Dies wird in einer Art und Weise ausgeführt werden, dass die Ausgabe des Befehls wird nur nach "Endesa" platziert werden:

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

Zum Beispiel habe ich gerade eine Datei Endesa1471530429.pdf in meinem Computer von touch "Endesa"$(date "+%s")".pdf" läuft.

Da die Parameter von pdftotext ist die Datei selbst Sie etwas Zeit sparen kann in einer Variablen den Wert durch das Speichern und zweimal mit:

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

Ah, OK! Also 'f = abc; mv $ f.pdf "Endesa $ (pdftotext -raw $ f.pdf - ...). pdf" '- ** es funktioniert! ** –

+1

@ Ze'ev yep! Es ist zwar gut, sich daran zu gewöhnen, Dinge zu zitieren, also sagen wir "mv" $ f "...", nur für den Fall, dass der Name Leerzeichen enthält. – fedorqui

1

einfach wie:

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

wie diese versuchen, ; mit einer Variablen

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