Есть много более простых и менее подверженных ошибкам способов сделать это. Если у вас GNU-версия date(1)
, например:
#!/usr/bin/env bash
shopt -s nullglob
declare -A mtimes
# Adjust pattern as needed
for file in *.{png,jpg}; do
mtimes[$(date -r "$file" +'%Y-%m-%d')]=1
done
mkdir "${!mtimes[@]}"
Здесь используется ассоциативный массив bash
для хранения всех временных меток, используемых для создания новых каталогов из и затем делает их все сразу с помощью одного mkdir
.
И поскольку я упомянул, что предпочитаю делать это в чем-то отличном от чистой оболочки в комментарии, tcl
однострочный:
tclsh8.6 <<'EOF'
file mkdir {*}[lsort -unique [lmap file [glob -nocomplain -type f *.{png,jpg}] { clock format [file mtime $file] -format %Y-%m-%d }]]
EOF
или perl
:
perl -MPOSIX=strftime -e '$mtimes{strftime q/%Y-%m-%d/, localtime((stat)[9])} = 1 for (glob q/*.{png,jpg}/); mkdir for keys %mtimes'
Оба из них имеют то преимущество, что не требуют специальной c реализации date
(опция -r
не является POSIX; не уверен, насколько широко она поддерживается за пределами версии GNU coreutils) или bash
4+ (проблема, если вы используете, скажем, Ma c (я думаю, они по-прежнему идут с perl, по крайней мере, до следующих версий OS X или двух)).