cambiar el nombre de una lista de archivos de acuerdo con un archivo de texto

8

Tengo una lista de archivos en una carpeta, que me gustaría cambiar el nombre de acuerdo con un archivo de texto. Por ejemplo:

Estos son los 5 archivos en la carpeta.

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

Me gustaría que cambien el nombre utilizando un archivo de texto que contiene una lista de nuevos nombres de archivo en el mismo orden, sin la extensión .nii:

n01
n02
n03
n04
n05

¿Cómo puedo hacerlo?

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

Respuestas:

9

un trazador de líneas, este comando lee el 'txt' de la lista y analiza para cada línea un archivo.

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

Podrías hacerlo:

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

... donde el archivo llamado "OLD" contiene los nombres de archivo antiguos y el archivo llamado "NEW" tiene los nuevos nombres coincidentes (1: 1).

JRFerguson
fuente
0

Si su shell admite la sustitución de procesos, intente:

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

o puedes hacerlo POSIXly:

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