3

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

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

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

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

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

Может быть, у кого-то уже есть что-то подобное в его / ее коллекции сценариев :-)

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

Марк

2 ответа2

2

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

  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

Вам нужно будет сделать это в несколько шагов

  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) (вокруг назначения echo | sed newdir должны быть обратные ссылки; Буду признателен за комментарий о том, как включить backtics в сегмент встроенного кода)
  5. А теперь имена файлов, так как имена каталогов не изменятся. Очень похоже на изменение каталога, только начальная find должна иметь -type f

Этого должно быть достаточно, чтобы вы пошли.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .