Intereting Posts
Как записать iso на CF-карту? SSH-доступ, запрашивающий пароль в локальной сети, но общедоступный Выполнить команду после панели tmux split Как обеспечить, чтобы терминал оставался прокручиваемым? Эмуляция изображения Большого Endian Basic Kernel Просмотр pagetable для процесса Изменение времени создания файла в файловой системе FAT Мош не пересоединяется Где находится информация о формате файловой системы, хранящемся на внешних жестких дисках где идут данные, записанные в дескриптор файла, который никогда не был открыт Опции ps помогают, как сообщить об усеченном списке процессов, отсортированных по нужным столбцам Как убить процесс, выполняемый в определенном скрипте Как ограничить соединения aria2 с одним сервером, но разрешить одновременные подключения к нескольким серверам? Нет действительных источников судопроизводства завиток и wget отрезать URL-адрес

Сценарий оболочки для переименования файлов

У меня есть сценарий оболочки:

#!/bin/bash for name in /home/imp/imp/msgs/$1.PK1; do mv "$name" "${name%.PK1}.BRD" 2>/dev/null >/dev/null done for name in /home/imp/imp/msgs/$1.PK2; do mv "$name" "${name%.PK2}.MIX" 2>/dev/null >/dev/null done 

Он работает, но только на уже существующих файлах. Что происходит, это то, что после первоначального сканирования создается больше. *.PK1 и *.PK2 . Я бы хотел, чтобы этот скрипт «зациклился» и переименовал файлы, созданные впоследствии. Это возможно?

ОБНОВИТЬ:

Это то, что у меня есть сейчас:

 #!/bin/bash while [ ! -z "$(ls *.PK1 *.PK2 2>/dev/null)" ]; do for name in /home/imp/imp/msgs/$1.PK1; do mv "$name" "${name%.PK1}.BRD" 2>/dev/null >/dev/null done for name in /home/imp/imp/msgs/$1.PK2; do mv "$name" "${name%.PK2}.MIX" 2>/dev/null >/dev/null done sleep 1; done 

Это верно?

Благодарю.

Есть ли какая-то причина использовать $1 for name in /path/$1.PK1 а не только for name in /path/*.PK1 ? Вы намеренно передаете шаблон шара в сценарий?

Если вы хотите поймать все файлы с этими суффиксами и новыми, как они появляются, простое решение в Bash будет примерно так:

 shopt -s nullglob dir=/home/imp/imp/msgs while true ; do for name in "$dir/"*.PK1; do mv "$name" "${name%.PK1}.BRD" 2>/dev/null >/dev/null done for name in "$dir/"*.PK2; do mv "$name" "${name%.PK2}.MIX" 2>/dev/null >/dev/null done sleep 1 done 

Если вы хотите избежать дополнительной работы, вы можете (в Linux) использовать что-то вроде inotifywait чтобы ждать появления новых файлов, например, как здесь: Как использовать inotifywait для просмотра каталога для создания файлов определенного расширения