|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Yuriy Kaminskiy 2:5020/517.21 13 Jun 2001 16:00:13 To : Andy Shevchenko Subject : Re: ? -------------------------------------------------------------------------------- Hello, Andy! >>>>> On 18:27 12/6/2001, Andy Shevchenko <2:465/192> writes: AK> А как переменовать файлы вида: "Гвв:*.txt" в "*.txt" ??? AS> скриптом: ls "Гвв:*.txt" | sed -e 's/Гвв://' | while read x do mv Мда. И он долго будет пытаться переименовать _один_ несуществующий файл Гвв:\*.txt в \*.txt. Hint: ls не делает glob, а жрет то, что ему передает sh. А то, что находиться в кавычках, sh не раскрывает. Решение на чистом bash/zsh: for f in Гвв:*.txt; do mv "$f" "${f#Гвв:}";done Короткое решение (с применением rename из perl-x.y.z/eg/*): rename s/^Гвв:// Гвв:*.txt Решение для более сложных случаев, но без использования perl: for f in Гвв:*.txt; do mv "$f" "`echo "$f"|sed 's/^Гвв://'`";done Для рекурсивных замен: find -depth -name 'Гвв:*.txt'|while read f; do mv "$f" "${f/\/Гвв://}";done # ^^^^^^ man find Осторожно: последнее решение неустойчиво по отношению к именам с переводами строк. AS> -f "Гвв:${x}" $x done -- Yuriy Kaminskiy. PS info bash, info sed, info find, man perl --- Gnus v5.2.25/XEmacs 19.14 * Origin: none (2:5020/517.21@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/17427259bdd47.html, оценка из 5, голосов 10
|