Переместить последнюю часть имени файла на передний план

Хм, у windows box раньше была аренда на 10. 10.3.83 случайно (на это может указывать dhcpd.leases)? Не уверен, что происходит что-то не так, поскольку я сохраняю все назначения фиксированных адресов за пределами адресов, перечисленных в range.

2
19.05.2018, 20:26
1 ответ

Использование/bin/sh:

for name in *.avi; do
    n=${name%.avi}    # name without filename extension
    first=${n%% - *}  # first part of name
    last=${n#* - }    # last part of name
    new="$last - $first.avi"  # recombined new name

    printf 'Would move "%s" to "%s"\n' "$name" "$new"
    # mv -- "$name" "$new"
done

${parameter%%word}удаляет самую длинную строку суффикса, соответствующую word, из $parameter, а ${parameter#word}удаляет самую короткую строку префикса, соответствующую word, из $parameter. Таким образом, код поменяет местами две вложенные строки -при первом появлении-(пробела -тире -пробела ).

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


В комментариях к ответу ilkkachu я вижу, что вы также хотите поменять местами первую часть имени, чтобы AB12-1998стало 1998-AB12.

Так как теперь мы выполняем две операции обмена с именем, мы можем поместить это в функцию:

swap () {
    # swaps the two part of a string around
    # the swap point is defined by the first argument

    swstr=$1
    string=$2

    first=${string%%$swstr*}
    last=${string#*$swstr}

    printf '%s%s%s\n' "$last" "$swstr" "$first"
}

for name in *.avi; do
    n=${name%.avi}
    n=$( swap ' - ' "$n" )
    first=${n%% - *}
    first=$( swap '-' "$first" )
    new="$first - ${n#* - }.avi"

    printf 'Would move "%s" to "%s"\n' "$name" "$new"
    # mv -- "$name" "$new"
done

Пример вывода:

Would move "This is a test - AB9-1995.avi" to "1995-AB9 - This is a test.avi"
Would move "This is a test - AB9-1996.avi" to "1996-AB9 - This is a test.avi"
Would move "This is a test - AB9-1997.avi" to "1997-AB9 - This is a test.avi"
Would move "This is a test - AB9-1998.avi" to "1998-AB9 - This is a test.avi"
Would move "This is a test - AB9-1999.avi" to "1999-AB9 - This is a test.avi"
2
27.01.2020, 21:52

Теги

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