我已经搜索了这个,但我想对使用路径没有很大的要求。 所以我尝试两个写一个bash脚本来使用tta和cue文件转换我的音乐集。 我的目录结构如下:tta文件的/Volumes/External/Music/Just/Some/Dirs/Album.tta和cue表的/Volumes/External/Cuesheets/Just/Some/Dirs/Album.cue。
我目前的方法是将/ Volumes / External设置为" root_dir"并获取album.tta文件的相对路径为$ ROOT_DIR / Music(在这种情况下,这将是Just / Some / Dirs / Album.tta),然后将此结果添加到$ ROOT_DIR / Cuesheets并从.tta更改后缀到.cue。
我目前的问题是,dirname按原样返回路径,这意味着/ Volumes / External / Music / Just / Some / Dirs不会转换为./Just/Some/Dirs/当我当前的文件夹是$ ROOT_DIR /音乐和绝对路径。
添加://如果有人遇到类似的问题,这是脚本:
#!/bin/bash
ROOT_DIR=/Volumes/External
BASE="$1"
if [ ! -f "$BASE" ]
then
echo "Not a file"
exit 1
fi
if [ -n "$2" ]
then
OUTPUT_DIR="$HOME/tmp"
else
OUTPUT_DIR="$2"
fi
mkfdir -p "$OUTPUT_DIR" || exit 1
BASE=${BASE#"$ROOT_DIR/Music/"}
BASE=${BASE%.*}
TTA_FILE="$ROOT_DIR/Music/$BASE.tta"
CUE_FILE="$ROOT_DIR/Cuesheets/$BASE.cue"
shntool split -f "${CUE_FILE}" -o aiff -t "%n %t" -d "${OUTPUT_DIR}" "${TTA_FILE}"
exit 0
答案 0 :(得分:8)
如果您的Cuesheets目录始终与您的音乐位于同一目录中,您只需从路径中删除root_dir,剩下的就是相对路径。如果您拥有album_path(album_path=/Volumes/External/Music/Just/Some/Dirs/Album.tta
)中的album.tta和root_dir设置(root_dir=/Volumes/External
)的路径,请执行${album_path#$root_dir}
。这会修剪来自album_path前面的root_dir,因此您将留下album_path=Just/Some/Dirs/Album.tta
。
有关bash字符串操作的更多信息,请参阅bash docs
编辑://将$ {$ album_path#$ root_dir}更改为$ {album_path#$ root_dir}
答案 1 :(得分:1)
好的,所以我过去曾经解决过这个问题。我不建议使用路径和pwd环境变量,我已经看到了一些灾难性的事件。
这就是我要做的事情
CURRENTDIR=/Volumes/External/Music # make sure you check the existence in your script
...
SEDVAL=$(echo $CURRENTDIR | sed s/'\/'/'\\\/'/g)
#run your loops for iterating through files
for a in $(find ./ -name \*ogg); do
FILE=`echo $a | sed s/$SEDVAL/./g` # strip the initial directory and replace it with .
convert_file $FILE # whatever action to be performed
done
如果您经常这样做,我实际上只是为此编写一个单独的脚本。