我有几个文件夹是有声读物。文件已编号,我想将它们转换为一个文件。 我使用以下脚本将其转换:
#!/bin/bash
if [ ! -d mp3 ]; then
mkdir -p mp3;
fi;
for f in ./*.flac; do echo "file '$f'" >> mylist.txt; done
ffmpeg -f concat -safe 0 -i mylist.txt -b:a 320k mp3/title.mp3
[ -e mylist.txt ] && rm mylist.txt
我的问题是我必须重命名前十个文件,因为它们的顺序不正确。这些文件的名称为1-标题,2-标题,3-标题,依此类推。为了获得正确的顺序,我必须将它们重命名为01-Title,02-Title,...,09-Title。 我如何用bash脚本做到这一点?此外,如果可以相应地更改playlist.m3u文件,那就太好了。
感谢您的帮助。
@Cyrus发布了正确的链接以解决我的问题。 解决的脚本:
#!/bin/bash
if [ ! -d mp3 ]; then
mkdir -p mp3;
fi;
for f in ./*.flac; do echo "file '$f'" >> mylist2.txt; done
sort -V mylist2.txt >> mylist.txt
rm mylist2.txt
ffmpeg -f concat -safe 0 -i mylist.txt -b:a 320k mp3/title.mp3
[ -e mylist.txt ] && rm mylist.txt
答案 0 :(得分:0)
您可以为此使用sort -n
。我是这样做的:
~/SO $ l
total 8
-rw-rw-r-- 1 user user 0 Sep 9 14:49 12 - Title
-rw-rw-r-- 1 user user 0 Sep 9 14:49 1 - Title
-rw-rw-r-- 1 user user 0 Sep 9 14:49 22 - Title
-rw-rw-r-- 1 user user 0 Sep 9 14:49 2 - Title
~/SO $ ls | sort -n
1 - Title
2 - Title
12 - Title
22 - Title
只是为了告诉您我没有“作弊”,以下是别名:
alias l='ls -lp'
alias ls='ls --color=auto'
因此您可以使用:
ls | sort -n | while read file
do
echo $file
done
这里的回显只是表明处理的文件的顺序确实尊重数值。