Передача путей и имен файлов в программу из сценария bash

Я использую утилиту под названием mp3wrap, которая объединяет несколько mp3-файлов в один. Скажем, у меня есть каталог «альбом 1», содержащий три файла «track 1.mp3», «track 2.mp3» и «track 3.mp3». Я буду запускать следующее:

mp3wrap album\ 1.mp3 album\ 1/*.mp3 

который объединит все три трека в каталоге «альбом 1» (второй аргумент) в новый файл «album 1.mp3» (первый аргумент).

У меня есть множество каталогов, таких как «альбом 2», «альбом 3» и т. Д., И я хотел бы написать сценарий для автоматизации процесса. Я попробовал это:

 for i in album* do mp3wrap $i.mp3 $i/*.mp3 done 

но я получаю ошибку

 1.mp3: No such file or directory 

Кажется, мой скрипт расширяет $ i до «album 1.mp3», который передается как два отдельных аргумента. После некоторых поисков и чтения я закончил с этим:

 for i in album* do mp3wrap "${i}.mp3" "${i}/*.mp3" done 

Теперь я не получаю сообщение об ошибке, вместо этого я получаю страницу «использование» из программы mp3wrap. Настолько ясно, что он не принимает аргументы так же, как когда я запускаю команду из командной строки, и я не знаю, как проверить, как выглядит фактическая строка командной строки при выполнении сценария bash.

Что я делаю не так? Любая помощь ценится!

One Solution collect form web for “Передача путей и имен файлов в программу из сценария bash”

Вы близко к нему. Вот правильный код:

 for i in album* do mp3wrap "${i}.mp3" "${i}"/*.mp3 done 

Переменные и аргументы должны всегда всегда цитироваться, чтобы избежать первой проблемы. Наоборот, символы глобуса оболочки, такие как * и ? не должны, иначе они теряют свое особое значение.

  • Я случайно скопировал часть каталога / * to / some /, как мне исправить мою ошибку?
  • Каталог Untar из большого tarball
  • команда tar - пропустить символические ссылки
  • Удалите несколько последовательных имен файлов, но игнорируйте часть первого
  • Как удалить 2 месяца назад файлы в unix
  • цикл в файле с определенным расширением в сценарии оболочки дочерней папки
  • Найти файлы, имя которых составляет 4 символа
  • Проблемы с basename в цикле
  • Переименуйте файл со странным именем на Samba mount
  • Как избавиться от «Ничего не найдено» при запуске «rm *»
  • Почему соответствует строчным буквам в bash?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.