Итак, вы хотите переименовать DBGC180_805754
в DBGC180_805753
, ... 55 С
по ... 54
и так далее. Я решу эту проблему.
Сначала поместите этот скрипт где-нибудь в ПУТЬ
, назовите его waltinator
.
#!/bin/bash
#step through the parameters
while [[ -n "$1" ]] ; do
oldname="$1"
# shift the arguments left
shift;
# strip off the fixed part of the old name
oldnum=${oldname##DBGC180_}
# decrement the number (this is what was wanted, right?)
newnum=$(( $oldnum - 1 ))
# build the new, improved filename
newname="DBGC180_$newnum"
if [[ -f "$newname" ]] ; then
printf "Cannot rename $oldname to $newname, $newname exists.\n" >&2
exit 1
fi
mv --no-clobber "$oldname" "$newname"
done
exit 0
Для следующего шага предположим, что сценарий находится в $ HOME / bin / waltinator
, а у вас есть chmod + x $ HOME / bin / waltinator
.
find . -type f -name 'BDGC180_[0-9][0-9][0-9][0-9][0-9][0-9]` -print | \
sort | \
xargs $HOME/bin/waltinator
find
находит файлы (в произвольном порядке), имена которых соответствуют шаблону оболочки оболочки " BDGC180_
, за которым следуют 6 цифр ( [0-9]
). Поскольку нам нужен отсортированный список (переименовать ... 97
в не удастся) ...96
перед переименованием ... 96
) мы запускаем вывод от find
через sort
. Затем мы используем xargs
, чтобы взять (отсортированный) список имен файлов, и создать команду для передачи (отсортированного) списка имен файлов в $ HOME / bin / waltinator
. Прочтите man xargs
, если вам нужно сократить список аргументов.
В этом отношении читать:
for page in bash mv find sort xargs ; do
man "$page"
done