Как пакетно переименовать файлы (изображения) на основе файла CSV

Взломанный прочь Cplusplus.com

std::string choppa(const std::string &t, const std::string &ws)
{
    std::string str = t;
    size_t found;
    found = str.find_last_not_of(ws);
    if (found != std::string::npos)
        str.erase(found+1);
    else
        str.clear();            // str is all whitespace

    return str;
}

Это работает на пустой случай также.:-)

11
задан 17.05.2020, 11:58

1 ответ

Это должно работать на Вас:

sed 's/"//g' files.csv | while IFS=, read orig new; do mv "$orig" "$new"; done 

Объяснение:

  • sed 's/"//g' files.csv: удалите кавычки
  • IFS=,: разделите вход по телефону ,
  • while read orig new; do ... done: Это считает каждую входную строку, разделит ее на значении $IFS (здесь запятая) и сохранит 1-е поле как $orig и остальные как $new.
  • mv "$orig" "$new": это переименует файлы согласно просьбе.

, Если Ваш файл только содержит имена файлов (как [1 110]) и никакие пути (не /home/take2/orig.jpg или подобный), команда выше будет только влиять на файлы в Вашем текущем каталоге. Так, необходимо открыть терминал, cd к целевому каталогу и выполнить его туда.

Тест сначала:

Для тестирования этого можно сделать пробный прогон сначала путем печати команд, которые будут выполнены, на самом деле не выполняя их:

sed 's/"//g' files.csv | while IFS=, read orig new; do echo mv "$orig" "$new"; done 
12
ответ дан 17.05.2020, 11:58
  • 1
    @take2, что маркировки? Нет, это просто берет первую запятую, разделил поле и переименовывает его к второму. Обратите внимание, что, если существует больше чем два поля, это переименует его к остальной части строки. Пока Ваш входной файл похож на то, что Вы отправили его, будет работать как ожидалось. – scharette 17.05.2020, 11:59
  • 2
    Btw. Терминал также отображает " mv: не может статистика ‘orig’: Никакой такой файл или directory" хотя это действительно переименовывало файл. – EricSchaefer 17.05.2020, 11:59
  • 3
    Большой, это объяснено лучше.:) Только для проверки прежде, чем выполнить его - я имею к CD к целевому каталогу и выполняю эту строку, или я должен сохранить ту строку как example.sh и затем выполнить " пример sh" от терминала? – Arsen Mkrtchyan 17.05.2020, 12:00
  • 4
    Замечательный, это работает! Просто еще одна вещь - делает она заботится о том, что является маркировками столбцов (они - " orig" и " new" в данный момент), или это просто переименовывает столбец имена к названиям столбца B? – dexter 17.05.2020, 12:00
  • 5
    @take2 можно просто выполнить строку непосредственно. Я обновил ответ со способом видеть то, что будет выполнено, на самом деле не изменяя Ваши файлы, я рекомендую сделать это сначала. – Jeff 17.05.2020, 12:01

Теги

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