Переименование файлов с помощью списка

У меня есть файлы, доступные в каталоге:

filename15_1 filename15_2 filename15_3 filename15_4 

И так далее.

У меня есть другой файл, который содержит информацию о том, как я хочу переименовать файлы. Это файл CSV.

 filename15_1,filename30_6 filename15_2,filename30_7 filename15_3,filename60_3 filename15_4,filename60_4 filename15_5,filename60_5 filename15_6,filename60_6 

Я хочу переименовать четыре файла, прочитав приведенное выше сопоставление. Файлы сопоставления имеют больше информации, чем фактические файлы, присутствующие в каталоге.

Мои файлы должны быть переименованы в следующее.

 filename30_6 filename30_7 filename60_3 filename60_4 

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

Примечание. Я являюсь человеком с базой данных и мало знаю об Unix.

5 Solutions collect form web for “Переименование файлов с помощью списка”

Если ваш файл сопоставления разделен запятой, вы можете сделать это:

 while IFS=, read orig target; do mv "$orig" "$target" done < mapping.txt 

Ну, довольно глупый ответ, но:

 sed -e 's/^/mv /' -e 's/,/ /' $mapping_file | sh 

С xargs который поддерживает -0 (и считая, что единственная запятая в каждой строке является разделителем):

 tr \\n, \\0 <mapping.txt | xargs -0 -n2 mv 

читаемым, сжатым подходом была бы system функция awk

 awk -F',' 'system("mv " $1 " " $2)' mappingFile.csv 

который будет запускать команду для каждой строки входного файла


краткое изложение команды

  • awk unix util, отлично подходит для обработки табличных данных
  • -F',' разделитель F ield является запятой
  • system("mv " $1 " " $2) выполняется для каждой строки входного файла
    • system(x) запустит x в подоболочке
    • $1 и $2 относятся к первому и второму столбцам соответственно
    • "mv " $1 " " $2 неявная конкатенация строит команду
  • mappingFile.csv использует этот входной файл

С помощью приведенных выше ответов я модифицировал код следующим образом и работает.

 cd $SRCE for file in * do while IFS="," read srce target do if [[ $file = $srce ]] ; then mv "$srce" "$target" fi done < map_lst done 
  • Как загрузить на сервер unix?
  • Есть ли одна строка для печати самой длинной строки в файлах в каталоге?
  • Я случайно GZIPed целую кучу файлов, один за другим, вместо использования tar (1). Как я могу отменить этот беспорядок?
  • Время доступа к файлу не обновляется в ubuntu 12.04
  • Как сравнивать каталоги с двоичными файлами
  • владелец файла сервера и группа были изменены при локальном редактировании файла
  • Новый пользователь не может создавать файлы в своем домашнем каталоге
  • Повторно копировать каталог и имена файлов n раз
  • Как реализовать горизонтальный кот?
  • Как grep несколько файлов, используя часть имени файла как шаблон?
  • md5sum для каждого файла (с ll)
  • Linux и Unix - лучшая ОС в мире.