2

У меня есть часть ниже в моем скрипте bash:

for file in $(cat $csmtdirpath/$images_to_remove); do mv -v -f /$currentimages/*"$file"* $oldimages >> "$log_image_to_move" 2>> "$log_images_to_move_error"; done

Этот метод использует подстановочный знак, который вызывает некоторые проблемы.

Так что, если у меня есть 7AB.115.2 в файле $ images_to_remove:

И в каталоге, где это выглядит:

  1. 7AB.115.2.1diudniwqndiqnwd
  2. 7AB.115.2.2ewfnweofnowenfwef
  3. 7AB.115.2.3fewklfkwemfkpwemfpkmw

Он также перемещает остальные 3 папки, потому что 7AB.115.2 является допустимой опцией, основанной на подстановочном знаке «$ file» .

Как я могу убедиться, что подстановочный знак использует только первое найденное совпадение и останавливается после?

Благодарю.

Ура,

1 ответ1

1

Как я могу убедиться, что подстановочный знак использует только первое найденное совпадение и останавливается после?

Чтобы переместить только первый найденный файл, замените:

mv -v -f /$currentimages/*"$file"* $oldimages

С:

for f in "/$currentimages/"*"$file"*
do
    mv -v -f "$f" "$oldimages"
    break
done

break вызывает выход из цикла после первого файла.

Кроме того, мы добавили кавычки вокруг переменных оболочки currentimages и oldimages для предотвращения разбиения слов.

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