Использование/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"
Возможно, вы захотите загрузиться с live CD. Оттуда вы можете манипулировать вашими подтомами btrfs, чтобы заменить @root _debian вашим целевым снимком:
# mount <yourDefaultBtrfsSubVolume> /mnt
# btrfs subvol snapshot /mnt/@root_debian/.snapshots/58/snapshot /mnt/@root_debian
Кроме того, если вы выбрали:
$ sudo snapper rollback 83
, как вы указали в своем комментарии, вам может просто потребоваться обновить установку grub, как это предполагает:https://wiki.archlinux.org/index.php/User:I2Oc9/Root_on_Btrfs_with_LUKS_full_disk_encryption#Rollback_root_filesystem