удар добавляет путь для обработки некоторых файлов

Я думаю причина, Вы ожидаете что-то другое, чем, что происходит, то, что Вы берете

[0-9]{n}

означать соответствие только точно n случаи символов в [0-9] и выбрасывать остальных, когда, что его выполнение находит n случаями символов в [0-9] и называет это соответствием. Таким образом в

[0-9]{1}

это находит любого точно одним возникновением чего-то соответствующего [0-9] так 1 соответствие, затем при исследовании этих 22, это останавливается в первых 2 и считает это соответствием, не смотря на остальных. Так же для 333. Если Вы указали

[0-9]{2}

это не соответствовало бы 1, но 22 соответствия и затем 33 в 333 соответствиях, таким образом, это захватывает его.

Как slm сказал, границы слова являются билетом здесь. У Вас есть и-P и-E разновидности grep regex соответствие в Вашем вопросе. Можно использовать GNU \<и \> с-E как это:

ls | xargs -n 1 basename | grep -E '\<[0-9]{1}\>'

или \b с или-E или соответствие pcre-P как это

ls | xargs -n 1 basename | grep -P '\b[0-9]{1}\b'
3
25.12.2014, 23:14
2 ответа

Эхо всегда успешно. Обойтись без него и дополнительной оболочки:

#!/bin/bash
echo "enter the directory name"
read ab
check(){
    if mkdir "$ab" 2>/dev/null; then
      echo "directory created "
      ls -ld "$ab"
      exit
    else
      echo "try again "
      echo "enter new value for directory: "
      read ab
      check
    fi
}
check
-121--84565-

Удивлен, что это еще не включено. Не требуется sudo :

lsblk -f

-121--3158-

Поместите в верхний скрипт:

shopt -s nullglob

тот путь, если в вашем случае нет mp3, как и в вашем случае (полагаю), ошибки не будет.

Если файл mp3 не соответствует подстановочному символу, оболочка принимает * .mp3 буквально.

3
27.01.2020, 21:16

Это происходит потому, что в каталоге нет .mp3 . Если вы выполнили этот взгляд в каталог без .mp3 и .wav файлы, Вы получите 2 ошибки, один для *. MP3 и секунду для *. WAV файлы.

Простое решение сделать эту работу даже когда .mp3 или .wav отсутствует, Чтобы добавить тест, если файл существует:

for a in $1*.{wav,mp3}; do
    test -f "$a" || continue
    ffmpeg -i "$a" -ar 44100 -ab $br "$br""_tmp/${a%.*} ["$br"].mp3"
done

, который сказал, что @SPUTNICK решение с Shopt -S Nullglob лучше, чем это.

Вы также должны цитировать $ 1 , и вы можете упростить цитаты в строке FFMPEG :

for a in "$1"*.{wav,mp3}; do
    test -f "$a" || continue
    ffmpeg -i "$a" -ar 44100 -ab $br "${br}_tmp/${a%.*} [$br].mp3"
done
2
27.01.2020, 21:16

Теги

Похожие вопросы