Получить исполняемый файл для любой команды [дубликат]

С помощью zsh :

zmodload zsh/datetime
autoload zmv
zmv -n '(**/)GMT(<->)*(.mp4)(#qD.)' '$1${(L)$(
  strftime %A "$(strftime -r %Y%m%d $2)")}$3'

Удалите -n , чтобы фактически выполнить переименование.

  • <-> соответствует любому десятичному числу.
  • Второй (...) записан в $ 2 , (.mp4) в $ 3 и в каталоге ( (** /) , рекурсивный) в $ 1 .
  • (# qD.) - квалификатор glob, который выбирает только обычные файлы (. : ни каталоги, ни символические ссылки, ни файлы / устройства ...), а также просматривать скрытые каталоги ( D для dotfile / dotdir).
  • $ {(L) ...} : преобразует расширение в нижний регистр.
  • strftime -r% Y% m% d : reverse-strftime (strptime) для преобразования даты во время эпохи.
  • strftime% A ... : форматирование времени для этой эпохи с% A для полного дня недели. Остерегайтесь зависимости от локали. (во французском регионе вы получите французский будний день).

В системе GNU и с оболочкой GNU ( bash ) вы можете сделать:

find . -name 'GMT*-*.mp4' -type f -exec bash -c '
  for file do
    base=${file##*/}
    date=${base#GMT}
    date=${date%%-*}
    wday=$(date -d "$date" +%A)
    echo mv -i "$file" "${file%/*}/${wday,,}.mp4"
  done' bash {} +

(удалить echo для выполнения операции).

$ {var ,,} является оператором bash для преобразования в нижний регистр. date -d является способом GNU date для синтаксического анализа даты (например, strftime -r выше).

В то время как zmv проверял конфликты перед началом переименования любого файла, этот - нет. Поэтому мы добавляем выше -i , чтобы, по крайней мере, дать вам шанс избежать затирания файлов. GNU mv имеет параметр -v , чтобы указать ему, что он собирается делать, что может быть полезно для отката команды позже, если что-то пойдет не так.

1
24.07.2015, 02:40
0 ответов

Теги

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