renomeie uma lista de arquivos de acordo com um arquivo de texto

8

Eu tenho uma lista de arquivos em uma pasta, que gostaria de renomear de acordo com um arquivo de texto. Por exemplo:

Estes são os 5 arquivos na pasta.

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

Eu gostaria que eles fossem renomeados usando um arquivo de texto contendo uma lista de novos nomes de arquivos na mesma ordem, sem a extensão .nii:

n01
n02
n03
n04
n05

Como posso fazer isso?

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

Respostas:

9

Em um liner, esse comando lê o txt 'list' e analisa para cada linha um arquivo.

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

Você poderia fazer:

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

... onde o arquivo "OLD" contém os nomes antigos e o arquivo "NEW" possui os novos nomes correspondentes (1: 1).

JRFerguson
fonte
0

Se o seu shell suportar substituição de processo, tente:

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

ou você pode fazê-lo POSIXly:

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