вставка измененной даты в имя файла - 2 случая

Я полагаю, что задам два отдельных вопроса, но контекст один и тот же, поэтому я надеюсь, что все будет в порядке.

У меня есть вывод нескольких процессов, как представлено ниже (который я не могу изменить).

25978.csv
26044.csv
26865.csv
26914.csv
27013.csv

То, чего я пытаюсь достичь с помощью этого ввода, - это "простая операция" вставки даты в имя файла или замены этого имени. Желаемая дата обычно соответствует последней измененной дате, так что это выполнимо с помощью for f in *.csv; do mv -- "$f" "$f-$(date +%Y%m%d -r "${f}")"; done и переименования oneliner. Иногда дата последнего изменения на один день отличается от того, что я ищу, поэтому мне интересно, есть ли простой способ (oneliner?) уменьшить это числовое значение (например, преобразовать 20160506 в 20160505)?

20150506.csv
20150507.csv
20150508.csv
20150509.csv
20150510.csv

Второй случай. Дата последнего изменения бесполезна, так как она совершенно неверна. Но число в имени файла увеличивается вместе с ожидаемой датой. Можно ли вставить в имя файла какое-то числовое значение и сделать так, чтобы это значение увеличивалось на единицу для каждого последующего файла? Вы видите, чего я пытаюсь добиться? Я просто не знаю как ;)...

EDIT Я нашел ответ на свой вопрос здесь - вроде бы... Может быть, я просто не могу его использовать?

cnt=0
for i in *; do
  let cnt=cnt+1
  mv "$i" "$(echo "${i}_${cnt}" | awk -F_ '{print $1"_"$3}')"
done

Я знаю, как модифицировать его для своих нужд, но в конечном итоге результат одинаков для всех файлов, как и "инкрементация не работает". Я сохранил код выше как rename.sh и вспомнил о разрешении его выполнения chmod 755 rename.sh, но все равно ничего не получилось...

0
13.04.2017, 15:36
1 ответ

Надеюсь, это не будет преступлением - отвечать на свой собственный вопрос. Я нашел частичное решение на AskUbuntu - работает для меня, по крайней мере, в первом случае.

touch -d "$(date -R -r filename) - 2 hours" filename

А для изменения всех файлов в подпапке, введите:

find DIRECTORY -print | while read filename; do
    # do whatever you want with the file
    touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done
0
28.01.2020, 04:50

Теги

Похожие вопросы