rinominare un elenco di file in base a un file di testo


8

Ho un elenco di file in una cartella, che mi piacerebbe rinominare in base a un file di testo. Per esempio:

Questi sono i 5 file nella cartella.

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

Mi piacerebbe farli rinominare usando un file di testo contenente un elenco di nuovi nomi di file nello stesso ordine, senza l'estensione .nii:

n01
n02
n03
n04
n05

Come posso fare per farlo?


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

Risposte:


9

un liner, questo comando legge il 'list' txt e analizza un file per ogni riga.

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

3

Potresti fare:

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

... dove il file "OLD" contiene i vecchi nomi di file e il file "NEW" ha i nuovi nomi corrispondenti (1: 1).


0

Se la tua shell supporta la sostituzione di processo, prova:

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

oppure puoi farlo POSIXly:

ls *.nii | paste -d' ' - /path/to/textfile | xargs -n2 mv
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.