Пакет переименовывает использование .csv

У меня есть 700 каталогов в одном местоположении, и я должен переименовать их использующий .csv файл как показано ниже:

Я хочу заменить названия Column_A с записями Column_B.

Column_A           Column_B

 F001               IC500
 F003               IC501
 F006               IC502
 F008               IC503
 ...                ...

Как делают я обрабатываю в пакетном режиме, переименовывают каталоги?

3
задан 2 September 2017 в 19:02

3 ответа

Сначала экспортируйте свои данные как .csv формат файла как ниже:

F001,IC500
F003,IC501
F006,IC502
F008,IC503

Затем работайте ниже сценария для переименования тех каталогов к их новым именам:

while IFS=, read -a dirName; do
    echo mv -v "/singleFolder/${dirName[0]}" "/singleFolder/${dirName[1]}";
done < /path/to/file.csv

mv -v /singleFolder/F001 /singleFolder/IC500
mv -v /singleFolder/F003 /singleFolder/IC501
mv -v /singleFolder/F006 /singleFolder/IC502
mv -v /singleFolder/F008 /singleFolder/IC503
  • read -a используемый для разделения каждого чтения строки в массив, базирующийся от IFS который я переопределил это к запятой,.

  • Каждая строка читает в dirName переменная.

  • С ${dirName[0]} мы получаем первую часть строки (столбец A).
  • С ${dirName[1]} мы получаем последнюю часть строки (столбец B).

  • mv команда, используемая для, переименовывает там.
    Таким образом с mv -v "/singleFolder/${dirName[0]}" "/singleFolder/${dirName[1]}", мы переименовываем название каталогов от columnA до нового имени в columnB, которые расположены в singleFolder каталог.

  • -v опция показывает то, что делается во время выполнения команды.


Также можно использовать команду, не делая содержание строки как массив как это:

while IFS=, read -r oldName newName;do
    echo mv -v "/singleFolder/${oldName}" "/singleFolder/${newName}";
done < /path/to/file.csv

Примечание: удалить echo команда к выполнению переименовывает на Ваших реальных каталогах.

6
ответ дан 1 December 2019 в 13:12

Существует , чтобы сделать это задание, конечно после экс-размышление, которое Ваши данные как .csv формат файла упомянули в предыдущем ответе .

Поэтому после экспорта его в .csv формат файла используйте эту команду для переименования легко:

awk -F, '{ system("echo mv -v " "/singleFolder/"$1 " /singleFolder/"$2) }' /path/to/file.csv

содержанием $1 будет первый ColumnA из .csv файла, и $2 будет второй ColumnB на основе awk's разделитель F ield, запятая ,, которая определяется -F, опция.

Как то же как другой ответ отмечают его, которые удаляют echo, команда к выполнению переименовывает на Ваших реальных каталогах.

2
ответ дан 1 December 2019 в 13:12

Также можно экспортировать те данные, которые хранятся в libreoffice как .csv файл с вкладкой или располагают с интервалами разделитель и использование xargs и mv как:

/path/to/singleFolder$ xargs -a /path/to/file.csv -n 2 echo mv -v

Примечания:

  1. Необходимо переключиться на singleFolder каталог сначала (см. командную строку в команде),
  2. Этот метод будет отказавшим (неожиданный, переименовывают), если Ваши каталоги имеют пространство на свои имена.
  3. Удалить echo чтобы иметь фактический переименовывают :)
1
ответ дан 1 December 2019 в 13:12

Другие вопросы по тегам:

Похожие вопросы: