Переименовать частично несколько файлов в папке - PullRequest
0 голосов
/ 02 июля 2019

У меня есть несколько файлов следующим образом

abcd_q1_2018.pdf
abcd_q2_2018.pdf
accc_q1_2018.pdf
accc_q2_2018.pdf
axxx_q2_2018.pdf

и текстовый файл, содержащий

abcd 1111
accc 2222
axxx 3333

теперь я хочу переименовать вышеуказанные файлы как

1111_q1_2018.pdf
1111_q2_2018.pdf
2222_q1_2018.pdf
2222_q2_2018.pdf
3333_q2_2018.pdf

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Мне нравятся циклы, так что вот некоторые для циклов!

Внешний цикл проходит через карту переименования, а внутренний цикл применяет карту переименования к каждому файлу в каталоге.

   IFS=$'\n' # So we can march through the map line-by-line 
   for key in `cat rename_map`; do 
      orig=`echo ${key} | awk '{print $1}'`
      new=`echo ${key} | awk '{print $2}'`
      for file in *_2018.pdf; do 
        new_file=`echo ${file} | sed -e "s/^${orig}/${new}/"` # ["] for variable sub
        mv ${file} ${new_file}                                # Rename it!
      done 
    done
0 голосов
/ 02 июля 2019

Вы можете использовать команду rename пакета util-linux следующим образом:

while read -r source target; do
    rename "$source" "$target" $files
done < $mapping_file

Где $files - это глобус или список файлов, описывающих файлы, которые вы хотите переименовать (./*.pdf если все файлы находятся в текущем каталоге) и $mapping_file ваш файл со списком замен.

Команда read будет разбирать каждую строку на две переменные, которые мы назвали source, иtarget.Мы используем while read ...; do ...; done < file для синтаксического анализа каждой строки файла и используем эти переменные в теле цикла в качестве параметров утилиты rename, которая ищет строку в имени файла и заменяет ее другой.

Если у вас есть утилита perl rename вместо утилиты util-linux (узнайте ваш man rename, чтобы узнать), вы можете использовать следующее:

while read -r source target; do
    rename "s/$source/$target/" $files
done < $mapping_file

Здесь образец запускается на ideone, который использует переименование perl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...