Создать переменную на основе порядка, в котором файл находится в алфавитном списке файлов

Я довольно новичок в скриптовой игре оболочки bash, но довольно хорошо поймал. Я пишу скрипт прямо сейчас для автоматизированного редактирования данных ID3 или mp3-файлов. В настоящее время я использую программу командной строки id3v2. Это mp3-файлы, которые поступают из программы сканирования полицейских, которую я записываю. Мне интересно, есть ли способ сделать переменную связанной с номером файла … вы знаете, я не знаю, как это сказать. Простите, борется с головной болью последние пару дней. Я могу это объяснить.

Поэтому, если бы я был в каталоге записей, я могу легко их перечислить в порядке, потому что время их записи является частью имени файла. Таким образом, общая команда ls создаст нечто вроде

File_012030.mp3 File_012040.mp3 File_012045.mp3 

Я хотел бы использовать переменную, чтобы назначить номер трека для каждого файла id3. Моя первая мысль заключается в том, чтобы каким-то образом использовать количество способов, которые находятся в списке файлов в этом каталоге. Таким образом, приведенный выше пример будет.

 File_012030.mp3 <- 01 File_012040.mp3 <- 02 File_012045.mp3 <- 03 

Разве это возможно?

2 Solutions collect form web for “Создать переменную на основе порядка, в котором файл находится в алфавитном списке файлов”

Просто используйте цикл for и счетчик:

 k=1; for file in *mp3; do id3v2 --track "$k" "$file" ((k++)) done 

Это будет итерация по всем файлам и каталогам, чье имя заканчивается в mp3 , сохраняя их как $file . Затем переменная $k увеличивается на один раз за итерацию ( ((k++)) ), поэтому $k будет номером файла в том порядке, в котором вы их обрабатываете, и вы можете использовать --track "$k" для установки номера трека ,

Это может быть так же просто (работает даже с именами файлов, которые используют символы новой строки):

 arr=(*) 

Все имена файлов в pwd будут храниться в массиве и доступны по его числу, например: "${arr[2]}" .

Звездочка очень похожа на ls, попробуйте echo * или, чтобы выбрать mp3 try echo *.mp3 чтобы увидеть его в действии.

Вы можете просмотреть список всех файлов с помощью:

 printf '%s\n' "${arr[@]}" 

Затем вы можете использовать цикл для обработки каждого имени файла:

 for (( i=0 ; i<${#arr[@]} ; i++ )); do id3v2 --track "$((i+1))" "${arr[@]}" done 
  • Объем переменных при вызове функции из find
  • Проверьте, содержит ли строка строку подстроки
  • dirname и basename против расширения параметров
  • Отложить переменное расширение до подоболочки
  • Передача переменной из одного сценария в другой
  • Как изменить переменные
  • Расширение «$ @» для пользовательских переменных
  • Как использовать расширенное значение переменной оболочки в имени другой переменной?
  • Как вы обрабатываете несколько правил валидации при различных пользовательских вводах?
  • Bash: Назначение переменной не похоже на «stick»
  • Объявление переменной параллельным sh -c ...
  • Interesting Posts

    Как удалить статический сетевой интерфейс, если он не подключен?

    После установки драйверов Nvidia пользовательский интерфейс GNOME не показывает

    запуск LXDE автоматически (без Диспетчера отображения)

    Отключите отображение информации о «завершенном xxx» в bash

    Ошибка в формате при добавлении столбца с sed

    Как получить вывод команды timeout без использования сценария оболочки

    SELinux: Как создать пользовательский ярлык для файлов?

    Как показать конкретные строки из определенных столбцов файла

    Openbox неправильно загружается

    ALT + F2 не работает в Linux Mint Mate

    Как найти, в каком оверлее есть желаемый пакет?

    Экран GNU: как можно надежно возобновить сеанс экрана?

    Удалить подстроку спереди и сзади переменной

    Как создать загрузочную постоянную ОС Linux, которая не блокируется?

    сценарий оболочки – команда echo не печатает в правильной последовательности

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