2014-12-04 6 views
0

У меня есть 224 PDF-файлы, и я хотел бы префикс файлов с номером и _переименовывать файлы на основе исходного файла

Пример: stackoverflow_nov_2014.pdf

Файл accounts.csv содержит: 2567 , StackOverflow

Поэтому цель состоит в том, чтобы взять 2567 и префикс в файл в формате PDF с подчеркиванием: 2567_stackoverflow_nov_2014.pdf

Я думаю, что я хотел бы использовать функцию чтения -r в цикл while, как описано здесь: https://unix.stackexchange.com/questions/147569/rename-a-batch-of-files-after-reading-from-a-source-file

Но при попытке этого, поскольку оно написано, оболочка дает использование команды mv и ничего не меняется с файлами.

Edit: Добавление примеры данных из источников файла (accounts.csv)

11,My_Golf_Shop 
2567,stackoverflow  
11122,Test_Store 

Кстати, файл источников (accounts.csv) не в том же порядке, что и файлы в каталоге, accounts.csv, поэтому каким-то образом должно быть сопоставление с именем файла и учетом accounts.csv.

+0

Вы бы описали свой сценарий оболочки, чтобы уточнить? –

+0

Привет, Джеки, кроме того, что размещено в ссылке выше, у меня нет сценария. Тем не менее, я опубликую некоторые данные из файла источников. –

+0

Вы заметили, что в примерах ссылок stackexchange файл, содержащий имена файлов для переименования, состоит из строк, разделитель полей которых является «пробелом», а в вашем случае разделителем полей является запятая ';'? – Jdamian

ответ

1

Ниже приведен сценарий, который должен работать в соответствии с предположением: 1. Все файлы находятся в одной папке 2. Для конкретного префикса этот скрипт будет только переименовывать первый найденный файл.

#!/bin/bash 
while read -r line; do 
    num=`echo $line |cut -f 1 -d ","` 
    prefix=`echo $line |cut -f 2 -d ","` 
    if [ -n "$num" -a -n "$prefix" ]; then 
     full_file=$(basename `eval find . -name '$prefix\*' -print -quit` 2>/dev/null) 
     mv $full_file ${num}_$full_file 2>/dev/null 
    fi 
done < accounts.csv 
+0

Вместо использования разреза для разбора строки просто установите IFS: 'while IFS =, read -r num prefix; do ... ' –

+0

Джеки отлично поработал! Было около 20, которые не были переименованы, но это не ошибка сценария. –

+0

Привет @WilliamPursell, какой вырезать вы предлагаете заменить? –