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

Я довольно новичок в скриптовой игре оболочки 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 
  • Как присвоить значение переменной, когда значение содержит символ $ в ней
  • Функция проверки переменной BASH
  • bash - определяющие переменные с VAR = $ {: - по умолчанию}
  • Как вы обрабатываете несколько правил валидации при различных пользовательских вводах?
  • Установка переменной со значением по умолчанию ведет себя по-другому, если перед командой?
  • Использование «$ {a: -b}» для назначения переменных в скриптах
  • dirname и basename против расширения параметров
  • Что означает «$ {x %% *}» в sh?
  • Расширение «$ @» для пользовательских переменных
  • Bash: Назначение переменной не похоже на «stick»
  • Команда rm в скрипте bash не работает с переменной
  • Linux и Unix - лучшая ОС в мире.