Как я могу увеличить объем - добавляет дата создания файла к имени файла?

Я генерировал ряд таймлапса изображений и назвал их последовательно {0000..9999}.jpg

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

0000.jpg → 20140815-142800-0000.jpg
0001.jpg → 20140815-142800-0001.jpg
0002.jpg → 20140815-142800-0002.jpg

Важно сохранить исходные элементы имени файла, и форматирование точной даты не настолько важно, пока это безопасно от имени файла и легко понять. Мой пример выше вставок это в передней стороне способом, которая способствует сортировке по дате.

Если Вы захотите тестовую обвязку файлов, то следующее создаст 10 файлов с возрастающими временами создания:

for i in {00..02}; do touch --date "2014-08-15 $i:$i:$i" 00$i.jpg; done
2
задан 16 August 2014 в 06:10

3 ответа

Можно использовать rename с реальным выражением Perl

$ rename 's/(\d+\.jpg)/use File::stat; sprintf("%s-%s", stat($&)->mtime, $1)/e' * -v
0000.jpg renamed as 1408057200-0000.jpg
0001.jpg renamed as 1408060861-0001.jpg
0002.jpg renamed as 1408064522-0002.jpg

Это оставляет файлы со временем начиная с эпохи. Найдите для сортировки, плохой для чтения.

Единственная проблема здесь - Вы, должен соответствовать целому имени файла (так, чтобы Вы могли статистика $& — иначе все соответствие — в замене). Это могло стать немного утомительным с действительно сложными именами.

Мы можем основываться на этом, чтобы иметь более стандартное форматирование даты:

$ rename 's/(\d+\.jpg)/use File::stat; use POSIX; sprintf("%s-%s", strftime("%Y%m%d-%H%M%S", localtime(stat($&)->mtime)), $1)/e' * -vn
0000.jpg renamed as 20140815-000000-0000.jpg
0001.jpg renamed as 20140815-010101-0001.jpg
0002.jpg renamed as 20140815-020202-0002.jpg
1
ответ дан 2 December 2019 в 03:01

И что-то основанное на ударе для простых имен файлов (как пример):

$ for f in *; do mv "$f" "$(date -d@$(stat --printf='%Y' "$f") +%Y%m%d%H%M%S)-$f"; done
$ ls -l
total 0
-rw-rw-r-- 1 oli oli 0 Aug 15 00:00 20140815000000-0000.jpg
-rw-rw-r-- 1 oli oli 0 Aug 15 01:01 20140815010101-0001.jpg
-rw-rw-r-- 1 oli oli 0 Aug 15 02:02 20140815020202-0002.jpg
1
ответ дан 5 August 2019 в 18:21

Вот что-то, что я переделал так, я мог на самом деле понять то, что продолжалось. Спасибо.

for file in *.log; 
    do
        created=$(stat -f "%m" $file)
        dateHat=$(date -r $created "+%F" )
        sizeBytes=$(stat -f "%z" $file)
        mv $file $dateHat"_size_"$sizeBytes"_"$file
    done
1
ответ дан 5 August 2019 в 18:21

Другие вопросы по тегам:

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