renommer une liste de fichiers en fonction d'un fichier texte

8

J'ai une liste de fichiers dans un dossier, que j'aimerai renommer en fonction d'un fichier texte. Par exemple:

Ce sont les 5 fichiers du dossier.

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

Je voudrais les faire renommer en utilisant un fichier texte contenant une liste de nouveaux noms de fichiers dans le même ordre, sans l'extension .nii:

n01
n02
n03
n04
n05

Comment puis-je m'y prendre?

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

Réponses:

9

une ligne, cette commande lit le txt 'list' et analyse pour chaque ligne un fichier.

for file in *.nii; do read line;  mv -v "${file}" "${line}";  done < list
Sébastien
la source
3

Vous pourriez faire:

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

... où le fichier nommé "OLD" contient les anciens noms de fichier et le fichier nommé "NEW" a les nouveaux noms correspondants (1: 1).

JRFerguson
la source
0

Si votre shell prend en charge la substitution de processus, essayez:

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

ou vous pouvez le faire POSIX:

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