无忧启动论坛

标题: 求助LINUX高手 [打印本页]

作者: qingyi78    时间: 2019-5-25 19:35
标题: 求助LINUX高手
本帖最后由 qingyi78 于 2019-5-28 04:50 编辑

大神们好,我在网上看到一个实用的批处理,但是用UBUNTU执行总是出错,能帮我看看有那些问题吗?或者可以修改成WINDOWS的吗?
Shell
#!/bin/sh
find -name \*.cue ! -name "._*" | while read cue; do
        flac=${cue%.*}.flac
        if [ -f "$flac" ]; then
                cwd=${cue%/*}
                flac=`basename "$flac"`
                cue=`basename "$cue"`
                pushd "$cwd"
                metaflac --remove-all "$flac";
                metaflac --import-cuesheet-from="$cue" "$flac" && metaflac --set-tag-from-file="CUESHEET=$cue" "$flac" && rm "$cue"
                popd
        fi
done

此问题已解决,是LINUX的换行符和WINDOWS的不一样,最终WINTOFLASH老大帮助解决了这个问题,感谢大家的帮助!
作者: zlq_hysy    时间: 2019-5-25 19:47
俺不会也,帮你顶

作者: nttwqz    时间: 2019-5-25 20:05
俺不会也,帮你顶
作者: caocaofff    时间: 2019-5-25 20:14
把你的报错贴出来
作者: qingyi78    时间: 2019-5-25 20:41
本帖最后由 qingyi78 于 2019-5-25 20:48 编辑
caocaofff 发表于 2019-5-25 20:14
把你的报错贴出来


我第一次接触LINUX,用虚拟机,然后共享文件夹,直接打开终端运行这个批处理,报告
@zz-virtual-machine:~$ '/mnt/hgfs/BACH/1.sh'
/mnt/hgfs/BACH/1.sh: 行 1: $'Shell\r': 未找到命令
/mnt/hgfs/BACH/1.sh: 行 14: 未预期的符号 `done' 附近有语法错误
/mnt/hgfs/BACH/1.sh: 行 14: `done'

作者: caocaofff    时间: 2019-5-25 21:14
qingyi78 发表于 2019-5-25 20:41
我第一次接触LINUX,用虚拟机,然后共享文件夹,直接打开终端运行这个批处理,报告
@zz-virtual-machi ...

开头的Shell和结尾的1都不是命令,直接
#!/bin/sh
...
done
作者: qwert112    时间: 2019-5-25 21:14
本帖最后由 qwert112 于 2019-5-28 18:30 编辑

@qingyi78 如果只是想纯粹共享文件夹,介于第一次接触linux,推荐两种方案:
一、虚拟机里面用ubuntu安装vmware tools要简单直接的多,挂载tools镜像之后,进入应该会看到“vmware-install.pl”文件,按照很早之前的印象,终端在相应目录下使用
chmod +x vmware-install.pl” 这条命令是增加执行权限,根据以往记忆默认不可执行
然后“./vmware-install.pl”,执行之后纯英文看不懂不要紧,一路"next"或者“yes”就可以。
凭记忆写的,基本上就是这个路子,非常简单。
因为用的是ubuntu,所以图形界面不需要共享文件夹,可以直接鼠标拖拽想使用的文件夹至虚拟系统或者实体系统。

二、另一种方案,可以构架ftp
我用的主系统是windows,所以一般直接用everything构建一个FTP服务作为宿主,其他系统直接用浏览器输入IP即可访问。


作者: fanlu    时间: 2019-5-25 21:45
本帖最后由 fanlu 于 2019-5-25 21:50 编辑

前面加sudo 没有 没有加应该执行无效吧,你这个是全目录找CUE格式的音频文件转换成flac? metaflac这个软件你安装没有? 这里有这个软件下载https://www.oschina.net/news/80581/flac-1-3-2,或者sudo apt-get install flac
作者: qingyi78    时间: 2019-5-25 22:34
fanlu 发表于 2019-5-25 21:45
前面加sudo 没有 没有加应该执行无效吧,你这个是全目录找CUE格式的音频文件转换成flac? metaflac这个软件你 ...

大神的回答让我看到一些曙光,是这样的,一般的FLAC都带一个CUE分轨文件,我上面的批处理就是在LINUX上执行的可以将所有的同名CUE文件合并到FLAC上的批处理。但是我不知道具体该在什么LINUX版本,需要哪些先决条件,用什么方式去执行这个批处理,请大神明示,谢谢!
作者: qingyi78    时间: 2019-5-25 22:35
caocaofff 发表于 2019-5-25 21:14
开头的Shell和结尾的1都不是命令,直接
#!/bin/sh
...

好的,我试试。
作者: qingyi78    时间: 2019-5-25 23:39
caocaofff 发表于 2019-5-25 21:14
开头的Shell和结尾的1都不是命令,直接
#!/bin/sh
...

提示依旧
作者: qingyi78    时间: 2019-5-25 23:50
fanlu 发表于 2019-5-25 21:45
前面加sudo 没有 没有加应该执行无效吧,你这个是全目录找CUE格式的音频文件转换成flac? metaflac这个软件你 ...

zzz@zzz-virtual-machine:/mnt/hgfs/BACH$ sudo '/mnt/hgfs/BACH/11.sh'
: not foundACH/11.sh: 1: /mnt/hgfs/BACH/11.sh: !/bin/sh
/mnt/hgfs/BACH/11.sh: 13: /mnt/hgfs/BACH/11.sh: Syntax error: "done" unexpected (expecting "then")

这个是前面运行了APT-GET INSTALL FLAC后加了SUDO后的结果
作者: qingyi78    时间: 2019-5-26 00:37
fanlu 发表于 2019-5-25 21:45
前面加sudo 没有 没有加应该执行无效吧,你这个是全目录找CUE格式的音频文件转换成flac? metaflac这个软件你 ...

我发现其实就是METAFLAC的批处理命令,下载了METAFLAC,程序是命令行操作的,不过看不大懂说明文件,我又没有批处理的基础,https://xiph.org/flac/documentation_tools_metaflac.html
作者: yexingqi    时间: 2019-5-26 11:12
本帖最后由 yexingqi 于 2019-5-26 11:14 编辑

哥们,你的运行脚本的命令就是错的!!

zzz@zzz-virtual-machine:/mnt/hgfs/BACH$ sudo '/mnt/hgfs/BACH/11.sh'
不能这样运行的。。。。
要用这种命令: sudo /mnt/hgfs/BACH/11.sh      
不能用' xxx ' 这种分隔符,明白了么。

另外, 最后一行的1是不需要的。

作者: yexingqi    时间: 2019-5-26 11:18
另外,你这个脚本的要求是: 查找当前目录下面有没有*.cue的文件:
find -name \*.cue ! -name "._*" | while read cue; do
这就意味着你需要这样运行脚本:
cd /mnt/hgfs/BACH/
sh ./11.sh
这才能正确地完成脚本的查找要求。
作者: qingyi78    时间: 2019-5-26 15:33
yexingqi 发表于 2019-5-26 11:18
另外,你这个脚本的要求是: 查找当前目录下面有没有*.cue的文件:
find -name \*.cue ! -name "._*" | wh ...

https://qiubuyi.me/?p=830我是看了这个贴子,按照你的操作后还是一样的NO FOUND提示
作者: yexingqi    时间: 2019-5-26 17:24
你修改成这样:
#!/bin/sh
set -x
find -name \*.cue ! -name "._*" | while read cue; do
        flac=${cue%.*}.flac
        if [ -f "$flac" ]; then
                cwd=${cue%/*}
                flac=`basename "$flac"`
                cue=`basename "$cue"`
                pushd "$cwd"
                metaflac --remove-all "$flac";
                metaflac --import-cuesheet-from="$cue" "$flac" && metaflac --set-tag-from-file="CUESHEET=$cue" "$flac" && rm "$cue"
                popd
        fi
done


然后运行你这个脚本,这个脚本需要增加执行权限: sudo chmod +x 11.sh
再运行
cd /mnt/hgfs/BACH/
sh ./11.sh

如果仍然出错,把所有出错的信息贴出来(这是调试模式)
作者: qingyi78    时间: 2019-5-27 04:51
yexingqi 发表于 2019-5-26 17:24
你修改成这样:
#!/bin/sh
set -x

非常感谢,我i现在先在虚拟机测试,如果不行,再到实体机测试。对了,MACOS可以运行这个脚本吗?
作者: 曾经沧海    时间: 2019-5-27 05:48
高手如云!
作者: my9823    时间: 2019-5-27 06:04
一般shell脚本以#!/bin/xxsh开头,用来给命令解释器看的,脚本就知道用那个命令解释器运行,如bash,zsh或者csh等。
作者: my9823    时间: 2019-5-27 06:08
macos是基于bsd的,而bsd是基于unix,你可以试试看,metaflac是个软件名吧?
作者: qingyi78    时间: 2019-5-27 13:18
my9823 发表于 2019-5-27 06:08
macos是基于bsd的,而bsd是基于unix,你可以试试看,metaflac是个软件名吧?

METAFLAC就是FLAC的软件
作者: qingyi78    时间: 2019-5-27 13:27
my9823 发表于 2019-5-27 06:08
macos是基于bsd的,而bsd是基于unix,你可以试试看,metaflac是个软件名吧?

刚刚试了一下,前面用了cd /mnt/hgfs/BACH/
sudo chmod +x 11.sh
sh ./11.sh
用你修改的是这样的
zzz@zzz-virtual-machine:/mnt/hgfs/BACH$ sh ./11.sh
./11.sh: 2: set: Illegal option -
用原来的是这样的
zzz@zzz-virtual-machine:/mnt/hgfs/BACH$ sh ./11.sh
./11.sh: 14: ./11.sh: Syntax error: end of file unexpected (expecting "then")


作者: qingyi78    时间: 2019-5-27 14:33
wintoflash 发表于 2019-5-27 13:38
你用的是macOS啊,那编辑脚本之后的换行符不对。

不要在macOS下编辑里面的sh文件。解压传给Linux后,

W大你好。我只是在虚拟机用ubuntu,但是我有黑苹果,不知道MAC有没有METAFLAC
作者: qingyi78    时间: 2019-5-28 04:42
wintoflash 发表于 2019-5-27 13:38
你用的是macOS啊,那编辑脚本之后的换行符不对。

不要在macOS下编辑里面的sh文件。解压传给Linux后,

现在脚本开始运行了,但是好像找不到METAFLAC文件
显示如下:
[sudo] zzz 的密码:
./1.sh: 8: ./1.sh: pushd: not found
./1.sh: 9: ./1.sh: metaflac: not found
./1.sh: 10: ./1.sh: metaflac: not found
./1.sh: 11: ./1.sh: popd: not found
./1.sh: 8: ./1.sh: pushd: not found
./1.sh: 9: ./1.sh: metaflac: not found
./1.sh: 10: ./1.sh: metaflac: not found

作者: qingyi78    时间: 2019-5-28 04:45
wintoflash 发表于 2019-5-27 13:38
你用的是macOS啊,那编辑脚本之后的换行符不对。

不要在macOS下编辑里面的sh文件。解压传给Linux后,

老大,太棒了,运行了APT-GET INSTALL FLAC后 显示如下:
zzz@zzz-virtual-machine:/mnt/hgfs/BACH$ sudo ./1.sh
./1.sh: 8: ./1.sh: pushd: not found
BACH - RILLING - VOL01 CD01.flac: WARNING cuesheet "BACH - RILLING - VOL01 CD01.cue" is not audio CD compliant: CD-DA cue sheet lead-out offset must be evenly divisible by 588 samples
./1.sh: 11: ./1.sh: popd: not found
./1.sh: 8: ./1.sh: pushd: not found
BACH - RILLING - VOL01 CD02.flac: WARNING cuesheet "BACH - RILLING - VOL01 CD02.cue" is not audio CD compliant: CD-DA cue sheet lead-out offset must be evenly divisible by 588 samples

作者: qingyi78    时间: 2019-5-28 04:52
此问题已解决,运行APT-GET INSTALL FLAC后,终端进入CUE和FLAC文件所在目录,再SUDO运行经WINTOFLASH大大修改过的SH文件就完美运行了!




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3