Как это строчное выражение работает в bash

Обычно я рекомендую использовать ls в программе (это логическое обоснование здесь), но это кажется простым, поэтому:

touch target.bak{0..10}   # for testing

base=target
bak="${base}.bak"
command ls -vr "$bak"* | while IFS= read -r file; do
    n=${file#$bak}
    echo mv "$bak$n" "$bak$((n+1))"
done
echo mv "$base" "${bak}0"
mv target.bak10 target.bak11
mv target.bak9 target.bak10
mv target.bak8 target.bak9
mv target.bak7 target.bak8
mv target.bak6 target.bak7
mv target.bak5 target.bak6
mv target.bak4 target.bak5
mv target.bak3 target.bak4
mv target.bak2 target.bak3
mv target.bak1 target.bak2
mv target.bak0 target.bak1
mv target target.bak0

Примечания:

использовать , чтобы избежать любых псевдонимов или функций для ls, используйте опцию ls -v для обеспечения сортировки файлов «численно», то есть «target.bak10» следует «target.bak9», а не «target.bak1»
1
задан 8 January 2015 в 10:07

0 ответов

Другие вопросы по тегам:

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