У меня есть 700 каталогов в одном местоположении, и я должен переименовать их использующий .csv файл как показано ниже:
Я хочу заменить названия Column_A с записями Column_B.
Column_A Column_B
F001 IC500
F003 IC501
F006 IC502
F008 IC503
... ...
Как делают я обрабатываю в пакетном режиме, переименовывают каталоги?
Сначала экспортируйте свои данные как .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
команда к выполнению переименовывает на Ваших реальных каталогах.
Существует команда awk, чтобы сделать это задание, конечно после экс-размышление, которое Ваши данные как .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
, команда к выполнению переименовывает на Ваших реальных каталогах.
Также можно экспортировать те данные, которые хранятся в libreoffice как .csv файл с вкладкой или располагают с интервалами разделитель и использование xargs
и mv
как:
/path/to/singleFolder$ xargs -a /path/to/file.csv -n 2 echo mv -v
Примечания:
singleFolder
каталог сначала (см. командную строку в команде),echo
чтобы иметь фактический переименовывают :)