Как переименовать все соответствующее определенной строке в папке

Я запускаю Linux, и у меня есть некоторое основное консольное знание, но моя текущая проблема является довольно трудной, и я не знаю, как достигнуть этого.

Я хочу/нуждаюсь переименовать все в папке, которая соответствует данной строке. Всем я имею в виду

  • папки/файлы
  • содержание в файле
  • содержание в скрытых файлах

В основном я хочу осуществить рефакторинг проект Java. Несомненно, я мог использовать Eclipse для обработки замены, но это не учитывает папки или ресурсы за пределами моей рабочей области.

Я думал о сценарии, который мог сделать задание для меня, но это кажется довольно хитрым. Например, когда дело доходит до folder-/file-rename я хочу заменить только часть имени, которое соответствует моей строке, остальные должны остаться нетронутыми.

Возможно, у кого-то уже есть что-то вроде этого в его наборе сценария :-)

Заранее спасибо

Marc

2
задан 20.05.2010, 00:38

2 ответа

Необходимо будет сделать это в несколько этапов

  1. Генерируйте список файлов, содержащих струну, которую Вы хотите поменять (например, find mydir -type f -print | xargs egrep <searchstring>)
  2. Для каждого из тех файлов сделайте замены (например, | while read fn; do sed 's/searchstring/replacement/g' $fn >/tmp/foo && mv /tmp/foo $fn; done)
  3. Теперь найдите, что имена каталогов изменяются (например, find mydir -type d -print | egrep <searchstring>)
  4. и измените их (например, | while read olddir; do newdir=echo $olddir | sed 's/searchstring/replacement/g'; mv $olddir $newdir; done) (должны быть обратные галочки вокруг эха | sed newdir присвоение; я ценил бы комментарий, как включать обратные галочки в сегмент встроенного кода),
  5. И теперь имена файлов, так как имена каталогов не изменятся. Очень похожий на изменение каталога, только начальная буква find должен быть -type f

Этого должно быть достаточно для получения Вас движение.

2
ответ дан 08.12.2019, 06:33

Быстрый и грязный способ сделать это мог быть:

  1. Получите список всех файлов, которые соответствуют Вашему шаблону

    # find /path -name \*pattern\* > filelist
    
  2. Выполните итерации через список файлов со сценарием оболочки, делая независимо от того, что Вы хотите к каждой строке:

    #!/bin/sh
    
    for I in `cat filelist`
    do
         # for renaming, use mv
         mv $I new.file.name
    done
    
2
ответ дан 08.12.2019, 06:33

Теги

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