나는 디렉토리를 통해 이동하고, MP3에서 ID3 정보를 추출하고, 태그 정보를 MySQL DB로 가져 오는 두 개의 Bash 스크립트가 있습니다. 실행을 끝내는 데는 꽤 시간이 걸리므로 누군가가 스크립트를 좀 더 효율적으로 만들 수있게되기를 바랍니다. 다음과 같이MySQL에서 가져 오기 속도를 높이는 Bash ID3
스크립트는 다음과 같습니다
:
makeid3dbentry.sh 다음 주 업데이트 스크립트에서 호출
INSERT INTO `music` (`artist`,`name`,`album`,`albumartist`,`filename`) VALUES ("1200 Micrograms","Ayahuasca","1200 Micrograms","1200 Micrograms","/mnt/sharedmedia/music/Albums/1200 Micrograms/1200 Micrograms [2002]/1-01 - 1200 Micrograms - Ayahuasca.mp3") ON DUPLICATE KEY UPDATE `artist`="1200 Micrograms",`name`="Ayahuasca",`album`="1200 Micrograms",`albumartist`="1200 Micrograms",`filename`="/mnt/sharedmedia/music/Albums/1200 Micrograms/1200 Micrograms [2002]/1-01 - 1200 Micrograms - Ayahuasca.mp3";
같은 INSERT 문을 생성
TRACK=$(id3info "$1" | grep '^=== TIT2' | sed -e 's/.*: //g')
ARTIST=$(id3info "$1" | grep '^=== TPE1' | sed -e 's/.*: //g')
ALBUM=$(id3info "$1" | grep '^=== TALB' | sed -e 's/.*: //g')
ALBUMARTIST=$(id3info "$1" | grep '^=== TPE2' | sed -e 's/.*: //g')
COLS='`artist`,`name`,`album`,`albumartist`,`filename`'
# Replace all: ${string//substring/replacement} to escape "
VALS='"'${ARTIST//\"/\\\"}'","'${TRACK//\"/\\\"}'","'${ALBUM//\"/\\\"}'","'${ALBUMARTIST//\"/\\\"}'","'${1}'"'
SETLIST='`artist`="'${ARTIST//\"/\\\"}'",`name`="'${TRACK//\"/\\\"}'",`album`="'${ALBUM//\"/\\\"}'",`albumartist`="'${ALBUMARTIST//\"/\\\"}'",`filename`="'${1}'"'
echo 'INSERT INTO `music` ('${COLS}') VALUES ('${VALS}') ON DUPLICATE KEY UPDATE '${SETLIST}';'
exit
updatemusicdb.sh
DIRFULLPATH="${1}"
DIRECTORY=$(basename "${DIRFULLPATH}")
SQLFILE="/var/www/html/scripts/sql/rebuilddb_${DIRECTORY}.sql"
find "${DIRFULLPATH}" -type f -iname "*.mp3" -exec /var/www/html/scripts/bash/makeid3dbentry.sh {} > "${SQLFILE}" \;
mysql --defaults-extra-file=/var/www/html/config/website.cnf --default-character-set=utf8 "website" < "${SQLFILE}"
불행히도 Bash & 병목 현상이 어디에 있는지 그리고 이러한 스크립트를 개선하는 방법을 알기에 충분할만큼 Linux 환경을 잘 모릅니다. 스크립트를 개선하는 방법에 대한 조언이나 다른 방법이 더 좋거나 더 빨라지면 감사하겠습니다.
모두 일치하는 태그를 참조하십시오. 출력 레코드의 기록은 1 awk 프로세스에서 수행 할 수 있습니다. 그것은 훨씬 더 빠를 것입니다. 행운을 빕니다. – shellter