Инструменты пользователя

Инструменты сайта


// Я или критин или...

В общем, есть куча файлов в дереве каталогов в которых нужно в имени заменить определённую часть, что-то простого пути сделать не нашел, а вот такое вот смострячил:

find ./usr -name "*2.3*" -print | xargs -L 1 -I '{}' echo mv '{}' \$\(echo '{}' \| sed \'s\|2.3\|2.4\|\'\) | bash -s

Собственно во всех файлах 2.3 нужно было заменить на 2.4. Что команда делает:

  1. Для начала:
    find ./usr -name "*2.3*" -print

    выводит на экран все файлы в имени которых есть 2.3

  2. xargs формирует ввод для команды, в нашем случае echo. '-L 1' - одна строчка ввода, один параметр, '-I '{}'' - делает подмену на то что на вводе, далее '{}' можно применять как макрос
  3. напечатанная команда вводить на stdin баша, где и выполняется.

Ужас, проще как??? :-D

UPD:

Мда, в общем сам себе и отвечаю:

find ./usr -name "*2.3*" -print | xargs rename 2.3 2.4

Комментарии