我正在编写一个将在Linux上运行以转换/编码音频文件的Bash脚本
到目前为止,转换工作正常,但是当根据我必须坚持的特定模式重命名生成的文件时,它会产生错误。
必须将名为Audio-001.flac的文件重命名为 2552011-Unit05-Fil001.flac遵循以下模式:[记录日期 - 记录单位ID - 文件ID]
我用于重命名的代码:
echo "Enter Recording Date, Recording Unit-ID, and File-ID Separated by SPACE"
read RD RU FID
echo "Your input is: $RD, $RU, $FD " >> /home/user-name/Music/User-Input.txt #This is for logging
mv $FLACS/*.flac $FLACS/${RD}-${RU}-${FID}.$flac
我收到错误:mv: target 22112011-Unit05-File0. is not a directory
我可以使用find和sed吗?
find bar -iname "*.wav" -printf 'mv %p %p\n' \
| sed 's/*\.wav$/${RD}-${RU}-${FID}\.flac/' \
| while read l; do eval $l; done`
答案 0 :(得分:4)
所需工作的细分,所以:
1 - 解析文件夹树(完整的.WAV文件)
这可以通过以下几种方式完成:
find WHERE -print | grep -i PATTERN #or
find WHERE -name ... print0 | xargs -0 -I% .... #or the simple
echo ./**/*.wav
2 - 使用开源工具,如flac和ffmpeg 将该文件夹树中的所有.WAV文件转换为.FLAC
是的,你是对的。一般语法是
flac [<general-options>] [<format-options>] [<encoding options>] [inputfile [...]]
3-将.FLAC文件重新放入 创建了相同的文件夹树 原来的
不是一项艰巨的任务。在Linux中,您可以使用mkdir
命令创建目录。您可以从find命令(1)获取相同的树。可能还需要使用dirname
命令。 (这里也是其他方式,但dirname很好)
命名新的.FLAC和他们的 它将添加一个相应的文件夹 文件名的唯一标识符 即名为2582001的文件夹包含 文件2582001-1.wav和2582001-2.wav 将被重新创建,并将包含两个 .FLAC文件的名称 2582001-REC05-FIL1.FLAC和 2582001-REC05-FIL2.FLAC。这个 新文件名的结构是 [录制日期 - 录制单元ID - 文件ID]。
同样不是一项艰巨的任务,您可以使用以下内容:
command > "${RecordingDate} - ${RecordingUnitID} - ${FileID}"
但不建议这样做。当然会更好地命名没有空格的文件,例如:
command > "${RecordingDate}-${RecordingUnitID}-${FileID}"
如果要重命名文件,请使用mv
命令,如:
mv oldfilename.ext "${RecordingDate}-${RecordingUnitID}-${FileID}.$newext"
Ps:如果你想要一些更准确的答案,请尝试更准确。 :)
答案 1 :(得分:0)
您正在尝试将mv
个更多文件转换为“一个文件”。
mv $FLACS/*.flac $FLACS/${RD}-${RU}-${FID}.$flac
*.flac
扩展为更多文件。你不能将更多的文件合并为一个。当移动更多文件时,mv希望将他的最后一个参数作为目录。
你可能想要:
mv $FLACS/some_one_file.flac $FLACS/${RD}-${RU}-${FID}.flac