переименовать список файлов в соответствии с текстовым файлом

8

У меня есть список файлов в папке, который я хочу переименовать в соответствии с текстовым файлом. Например:

Это 5 файлов в папке.

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

Я хотел бы, чтобы они переименовывались с использованием текстового файла, содержащего список новых имен файлов в том же порядке, без расширения .nii:

n01
n02
n03
n04
n05

Как я могу сделать это?

Элайджа Мак
источник
3
ls | paste - /the/text/file | xargs -n2 mv
Стефан Шазелас

Ответы:

9

Эта команда считывает текст «list» и анализирует для каждой строки файл.

for file in *.nii; do read line;  mv -v "${file}" "${line}";  done < list
Себастьян
источник
3

Вы могли бы сделать:

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

... где файл с именем "OLD" содержит старые имена файлов, а файл с именем "NEW" имеет новые совпадающие (1: 1) имена.

JRFerguson
источник
0

Если ваша оболочка поддерживает подстановку процессов, попробуйте:

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

или вы можете сделать это POSIXly:

ls *.nii | paste -d' ' - /path/to/textfile | xargs -n2 mv
cuonglm
источник