Переименование файлов в префикс и средняя часть имени файла

У меня есть сценарий, который в какой-то момент делает следующее:

for src in $(find -H "$ROOT_DIR" -maxdepth 5 -name '*.test' -not -path '*.git*') do fixed_filename=$(echo "$(basename "${src%.*}")" | sed 's/-test//') 

В принципе, у меня есть файлы под названием thing-test.js.test

При прохождении цикла я хотел бы получить имя файла thing.js

В конце концов, я создам полный путь к файлу с помощью path="$ROOT_DIR"/"$fixed_filename"

Вышеприведенное, похоже, работает, но это определенно неверно: я – жадный пользователь shellcheck, и он говорит мне, что есть бесполезное эхо (я согласен) и пытаюсь использовать ${variable//search/replace} если это возможно.

Поблагодарили бы за помощь в очистке выше.

Редактировать:

Основная суть того, что я пытаюсь сделать, это:

Я пытаюсь рекурсивно искать каждый файл в каталоге, следуя определенному шаблону имени файла, например file-test.js.test и внутри этих файлов являются переменными-заполнителями, например REPLACEME Я хочу найти все эти файлы и один за другим, один заменит REPLACEME на строку, предоставленную пользователем, из вызова чтения внутри скрипта bash, и пока я там, я хотел бы изменить имя файла на file.js например remove -test и .test

  • Могу ли я запретить создание файлов с определенными разрешениями?
  • Использование переименования для переименования файлов и каталогов
  • переименовывать имена файлов на основе некоторых вычислений
  • mv файл без нарушения символической ссылки на этот файл
  • Избавиться от символов 000A в именах файлов
  • Изменение имен массовых файлов?
  • Конвертировать год-месяц-день в день недели в имени файла
  • Перемещение, копирование и преобразование имен файлов
  • 2 Solutions collect form web for “Переименование файлов в префикс и средняя часть имени файла”

    Чтобы переименовать, например, stuff-X.js.test в stuff.js (не зная расширения до .test ), вам нужно будет использовать несколько выражений для извлечения необходимых частей, например, разделить путь на голову h=${path%/*} и tail t=${path##*/} затем получите строку перед тире с ${t%%-*} а для строки в середине получите имя без расширения, например noext=${t%.*} затем из этого экстракта, что теперь является новым расширением с ext=${noext##*.} так что:

     find . -name '*-*.test' -exec sh -c 'h=${1%/*}; t=${1##*/}; noext=${t%.*};\ ext=${noext##*.}; fixed=${h}/${t%%-*}.${ext}; echo mv "$1" "$fixed"' sh {} \; 

    Используйте команду find сочетании с оболочкой с использованием флага -exec :

     $ find -name "*.test" -exec sh -c 'echo "$(basename -s ".test" "$1")".js' sh {} \; one.js three.js two.js 

    Обратите внимание, что basename -s ".test" "$1" удаляет суффикс, поэтому вам не нужно вызывать sed в первую очередь.

    Если в конце концов вам нужно сделать что-то еще с этим «фиксированным именем файла», замените это эхо с присвоением переменной и продолжайте работать в той же команде sh . Что-то вроде этого:

     $ find -name "*.test" -exec sh -c 'fixed_name=$(basename -s ".test" "$1").js; my_other_command "$fixed_name"' sh {} \; 
    Interesting Posts

    / proc / bus / usb в / etc / fstab запрещает мой компьютер запускать графическую сессию

    Как быстро скопировать схему разделов GPT с одного жесткого диска на другой?

    Остановите мой компьютер, чтобы спать каждые 10 минут

    Свободное использование неиспользуемого пространства в разделе, недоступном после монтирования

    Режим туннеля IPsec – настройка RoadWarriors

    Латексные выражения, показанные в терминале

    Эффективно работает makepkg ar на git master (частые, но «маленькие» изменения)

    GNOME-TERMINAL испорчен

    Как получить статус сети (онлайн / офлайн) и присвоить ее переменной в сценарии оболочки?

    Перемещение Fedora на другой компьютер

    Нет класса трафика tc в интерфейсе моста

    Хранение части аргументов командной строки в массиве пользователей

    Множественные подстановочные соответствия для файла sudoers?

    Как рассчитать сумму данных, имеющих один и тот же идентификатор в первом столбце?

    Как объединить значения из двух столбцов?

    Linux и Unix - лучшая ОС в мире.