Benennen Sie eine Liste von Dateien entsprechend einer Textdatei um

8

Ich habe eine Liste von Dateien in einem Ordner, die ich anhand einer Textdatei umbenennen möchte. Zum Beispiel:

Dies sind die 5 Dateien im Ordner.

101_T1.nii
107_T1.nii 
109_T1.nii
118_T1.nii
120_T1.nii

Ich möchte, dass sie mithilfe einer Textdatei mit einer Liste neuer Dateinamen in derselben Reihenfolge ohne die Erweiterung umbenannt werden .nii:

n01
n02
n03
n04
n05

Wie kann ich das machen?

Elijah Mak
quelle
3
ls | paste - /the/text/file | xargs -n2 mv
Stéphane Chazelas

Antworten:

9

Ein Befehl, dieser Befehl liest den 'list'-Text und analysiert für jede Zeile eine Datei.

for file in *.nii; do read line;  mv -v "${file}" "${line}";  done < list
Sebastian
quelle
3

Du könntest es tun:

paste OLD NEW|while read OLD NEW;do mv ${OLD} ${NEW};done

... wobei die Datei mit dem Namen "OLD" die alten Dateinamen enthält und die Datei mit dem Namen "NEW" die neuen übereinstimmenden (1: 1) Namen hat.

JRFerguson
quelle
0

Wenn Ihre Shell die Prozessersetzung unterstützt, versuchen Sie Folgendes:

paste -d' ' <(ls *.nii) /path/to/textfile | xargs -n2 mv

oder Sie können es POSIXly tun:

ls *.nii | paste -d' ' - /path/to/textfile | xargs -n2 mv
cuonglm
quelle