Использовать символическую ссылку для перенаправления?

Итак, вы хотите переименовать 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   
2
10.06.2016, 01:58
0 ответов

Теги

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