Пропустить первую строку (или больше) в CSV-файле, который используется для переименования файлов

Я использовал информацию из другого вопроса в Stack Exchange, чтобы разрешить мне переименовывать файлы, используя информацию в файле csv. Эта строка позволяет мне переименовать все файлы из имен в столбце 1, в имена в столбце 2.

while IFS=, read -r -a arr; do mv "${arr[@]}"; done <$spreadsheet 

Однако он пытается сравнить информацию в верхней строке. Я хотел бы иметь возможность включать некоторый код, который позволяет мне пропускать строки. Было бы также неплохо получить лучшее представление о том, как работает эта строка кода. Я бы подумал, что это будет включать некоторую информацию о столбцах (например, A и B), но я не вижу никакой информации, которая связана с этим, и как noob, пытающийся разобраться в этом языке. Было бы хорошо знать как это работает. Любая информация оценена.

One Solution collect form web for “Пропустить первую строку (или больше) в CSV-файле, который используется для переименования файлов”

Попробуй это:

 tail -n +2 $spreadsheet | while IFS=, read -r -a arr; do mv "${arr[@]}"; done 

Команда tail выводит только последние строки файла. С помощью «-n +2» он печатает все последние строки файла, начиная со второго.

Подробнее о цикле while. Циклы while запускают команду mv пока доступны новые строки. Он делает это, используя условие цикла while:

 IFS=, read -r -a arr 

То, что указано выше, читается одной строкой в ​​массиве с именем arr , где разделитель полей (IFS) является запятой. Вероятно, опция -r не нужна.

Затем при запуске команды mv «$ {arr [@]}» преобразуется в список полей, где каждое поле разделяется двойными кавычками. В вашем случае имеется только два поля для каждой строки, поэтому он расширяется только до двух полей. «$ {Arr [@]}» – специальное соглашение, используемое bash для массивов, как описано в руководстве:

  Any element of an array may be referenced using ${name[subscript]}. The braces are required to avoid conflicts with pathname expansion. If subscript is @ or *, the word expands to all members of name. These subscripts differ only when the word appears within double quotes. If the word is double-quoted, ${name[*]} expands to a single word with the value of each array member separated by the first character of the IFS special variable, and ${name[@]} expands each element of name to a sepa- rate word. When there are no array members, ${name[@]} expands to nothing. If the double-quoted expansion occurs within a word, the expansion of the first parameter is joined with the beginning part of the original word, and the expansion of the last parameter is joined with the last part of the original word. This is analo- gous to the expansion of the special parameters * and @ (see Special Parameters above). ${#name[subscript]} expands to the length of ${name[subscript]}. If sub- script is * or @, the expansion is the number of elements in the array. Referenc- ing an array variable without a subscript is equivalent to referencing element zero. 
  • shell-скрипты все еще работают без #! (строка sha-bang)
  • Bash получает вход во время присутствия флага?
  • Выполните параллельные команды запуска и дождитесь завершения одной группы команд до начала следующего
  • Как спать до определенной даты и времени?
  • Установите выравнивание числовых столбцов при разделении данных
  • Многострочные комментарии сценария оболочки - как это работает?
  • Скрипт для изменения времени изменения файлов и каталогов рекурсивно
  • как удаленно выполнять сценарий оболочки с повышенными привилегиями
  • выход функции bash в трубу
  • Какова цель запуска сценария?
  • Какие методы регулярных выражений для проверки ввода можно использовать в сценариях оболочки?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.