2016-04-10 2 views
0

У меня около 500 файлов, которые мне нужно переименовать с датой представления отчета. Имена файлов в настоящее время:Bash - Изменение имени файла Дата + 1

WUSR1453722998383.csv 
WUSR1453723010659.csv 
WUSR1453723023497.csv 

И так далее. Номера в имени файла не имеют ничего общего с датой, поэтому я не могу использовать имя файла в качестве руководства для того, для чего должен быть переименован файл. Отчеты начинаются с 02/12/2014, и есть отчет за каждый день месяца до вчерашнего дня (09/04/2016). К счастью, также имя файла является последовательным - так что 04/12/2014 будет иметь большее число, чем 03/12/2014, которое будет иметь большее число, чем 02/12/2014. Это означает, что файлы автоматически перечислены в алфавитном порядке.

Существует, однако дата в первой строке CSV перед данными:

As at Date,2014-12-02 

Теперь я проверил, что у меня есть все файлы уже и я, так что это лучший способ, чтобы переименовать там до даты? Я могу установить дату начала как 02/12/2014 и переименовать каждый файл в качестве даты +1 или сценарий может прочитать дату в первой строке файла (например, As at Date,2014-12-02) и использовать эту дату для переименования файла.

Я понятия не имею, как написать один из методов выше в bash, поэтому, если бы вы могли помочь в этом, это было бы действительно оценено.

С точки зрения выхода файла, я надеялся:

02-12-2014.csv 03-12-2014.csv

И так далее

+0

Добро пожаловать в Переполнение стека. Вскоре прочитайте страницу [О программе]. Вы хотите, чтобы файлы отображались в порядке даты? Так что, используя имена типа 'WUSR-2014-02-12.csv' (или, возможно,' WUSR-20140212.csv'), вы укажете дату в названии? Вы должны добавить желаемый результат (окончательные имена файлов) к своему вопросу (вы можете отредактировать свой вопрос). Вам нужно сохранить исходный номер? Как вы проверили, что у вас есть все файлы? Независимо от того, что вы сделали, вы должны дать вам некоторое представление о том, как получить необходимую информацию в сценарии оболочки. Что вы пробовали? –

+0

Я использовал: head -q -n 1 * .csv> output.csv, чтобы проверить, что у меня есть весь файл (я использовал выходной CSV и сопоставлял его с каждой датой с 02/12/2014 по вчерашний день, и они все там). Я предполагаю, что я могу использовать что-то подобное для переименования файлов (где он берет первую строку каждого CSV и использует дату там для переименования файла), я просто не знаю, как точно связать все это вместе. .. –

+0

Я никогда не понимаю, почему людям нравятся файлы, заказанные таким образом, чтобы файлы с 14 февраля 2014 года сопровождались файлом 14 февраля 2015 года и 14 февраля 2016 года, а затем 15 февраля 2014 года, 15 февраля 2015 года, 15 февраля 2016 года и т. Д. Тем не менее, это распространенная проблема - должна быть какая-то причина, но я уверен, что она в основном подсознательна. –

ответ

1

Это ответ, который вы необходимость? Предположим, что все файлы находятся в текущем каталоге. Проведите несколько проверок, прежде чем выполнять настоящую операцию. Условие - каждая строка даты в вашем файле cvs уникальна. В противном случае некоторые файлы будут перезаписаны.

#!/bin/bash 
for f in *.csv 
do 
    o=$(sed '1q' $f |awk -F"[,-]" '{print $NF"-"$(NF-1)"-"$(NF-2)".csv"}') 
    # should we backup the file? 
    # cp $f ${f}.bak 
    mv $f $o 
done 
+0

Легенда, спасибо. –

Смежные вопросы