Сценарий оболочки для перемещения файлов между двумя каталогами

У меня есть несколько папок, которые содержат подпапки, такие как JAN / Jan / FEB / Feb / MAR / Mar / и т. Д. Мне нужно переместить все файлы из JAN / * в Jan /, FEB / * в Feb и т. Д. Как мне достичь этого с помощью сценария оболочки?

редактировать
Спасибо @Costas за то, что указали мне в правильном направлении. Его решение будет работать с Bash 4 и выше. Поскольку у меня был v3, я в конечном итоге использовал это.

for DIR in [AZ][AZ]*/ do NEWDIR=`echo "$(echo "$DIR" | sed 's/.*/\L&/; s/[az]*/\u&/g')"` mv $DIR/* $NEWDIR done 

sed, взятый отсюда .

  • Ошибки с командой git alias shell
  • Cronjob перезаписывает перенаправление сценария
  • При запуске сценария оболочки можно передавать конкретные позиционные параметры без необходимости вводить их в порядок?
  • Как я могу получить bash, чтобы выйти с ошибкой backtick, аналогично отказу?
  • Используя sshpass, код возврата (статус выхода) отличается по неизвестным причинам с использованием допустимых команд
  • автоматизация конфигурации CentOS 7 с использованием сценариев оболочки
  • Запустить скрипт на / dev / tty-доступ
  • В чем проблема с этим скриптом для изменения обоев?
  • 2 Solutions collect form web for “Сценарий оболочки для перемещения файлов между двумя каталогами”

    Для современного bash (который поддерживает изменение случая):

     for dir in [AZ][az]*/ do mv -t "$dir" ${dir^^}/* done 

    В неподдерживаемых версиях вы можете использовать tr | sed | … вместо этого.

    Используя prename в Perl утилиту rename которая входит в стандартную комплектацию Debian, но известна как prename в некоторых других системах, вы можете сделать это с помощью одной команды

     ( LC_ALL=C; prename -v 's!^([AZ])([AZ]{2}/)!$1\L$2!' [AZ][AZ][AZ]/* ) 

    Это заставляет локаль C , которая гарантирует совпадение имени файла, что позволяет шаблону файла [AZ][AZ][AZ] забирать только месяцы с заглавными буквами. Замена свопит три заглавные буквы для заглавной буквы, за которой следуют две строчные буквы.

    Если вы предпочитаете, вы можете поменять шаблон имени файла [AZ][AZ][AZ]/* для явного списка всех двенадцати месяцев: {JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC}/*

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