无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3105|回复: 27

[已解决] 求助LINUX高手

[复制链接]
发表于 2019-5-25 19:35:30 | 显示全部楼层 |阅读模式
本帖最后由 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老大帮助解决了这个问题,感谢大家的帮助!
发表于 2019-5-25 19:47:52 | 显示全部楼层
俺不会也,帮你顶
回复

使用道具 举报

发表于 2019-5-25 20:05:35 来自手机 | 显示全部楼层
俺不会也,帮你顶
回复

使用道具 举报

发表于 2019-5-25 20:14:46 | 显示全部楼层
把你的报错贴出来

点评

我第一次接触LINUX,用虚拟机,然后共享文件夹,直接打开终端运行这个批处理,报告 行 11: 语法错误: 未预期的文件结尾  详情 回复 发表于 2019-5-25 20:41
回复

使用道具 举报

 楼主| 发表于 2019-5-25 20:41:21 | 显示全部楼层
本帖最后由 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'

点评

开头的Shell和结尾的1都不是命令,直接 #!/bin/sh ... done  详情 回复 发表于 2019-5-25 21:14
回复

使用道具 举报

发表于 2019-5-25 21:14:50 | 显示全部楼层
qingyi78 发表于 2019-5-25 20:41
我第一次接触LINUX,用虚拟机,然后共享文件夹,直接打开终端运行这个批处理,报告
@zz-virtual-machi ...

开头的Shell和结尾的1都不是命令,直接
#!/bin/sh
...
done

点评

提示依旧  详情 回复 发表于 2019-5-25 23:39
好的,我试试。  详情 回复 发表于 2019-5-25 22:35
回复

使用道具 举报

发表于 2019-5-25 21:14:56 | 显示全部楼层
本帖最后由 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即可访问。
微信图片_20190525211034.png
微信图片_20190525211034.png
回复

使用道具 举报

发表于 2019-5-25 21:45:51 | 显示全部楼层
本帖最后由 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

点评

我发现其实就是METAFLAC的批处理命令,下载了METAFLAC,程序是命令行操作的,不过看不大懂说明文件,我又没有批处理的基础,https://xiph.org/flac/documentation_tools_metaflac.html  详情 回复 发表于 2019-5-26 00:37
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" unex  详情 回复 发表于 2019-5-25 23:50
大神的回答让我看到一些曙光,是这样的,一般的FLAC都带一个CUE分轨文件,我上面的批处理就是在LINUX上执行的可以将所有的同名CUE文件合并到FLAC上的批处理。但是我不知道具体该在什么LINUX版本,需要哪些先决条件,  详情 回复 发表于 2019-5-25 22:34
回复

使用道具 举报

 楼主| 发表于 2019-5-25 22:34:29 | 显示全部楼层
fanlu 发表于 2019-5-25 21:45
前面加sudo 没有 没有加应该执行无效吧,你这个是全目录找CUE格式的音频文件转换成flac? metaflac这个软件你 ...

大神的回答让我看到一些曙光,是这样的,一般的FLAC都带一个CUE分轨文件,我上面的批处理就是在LINUX上执行的可以将所有的同名CUE文件合并到FLAC上的批处理。但是我不知道具体该在什么LINUX版本,需要哪些先决条件,用什么方式去执行这个批处理,请大神明示,谢谢!
回复

使用道具 举报

 楼主| 发表于 2019-5-25 22:35:10 | 显示全部楼层
caocaofff 发表于 2019-5-25 21:14
开头的Shell和结尾的1都不是命令,直接
#!/bin/sh
...

好的,我试试。
回复

使用道具 举报

 楼主| 发表于 2019-5-25 23:39:06 | 显示全部楼层
caocaofff 发表于 2019-5-25 21:14
开头的Shell和结尾的1都不是命令,直接
#!/bin/sh
...

提示依旧
回复

使用道具 举报

 楼主| 发表于 2019-5-25 23:50:57 | 显示全部楼层
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后的结果
回复

使用道具 举报

 楼主| 发表于 2019-5-26 00:37:33 | 显示全部楼层
fanlu 发表于 2019-5-25 21:45
前面加sudo 没有 没有加应该执行无效吧,你这个是全目录找CUE格式的音频文件转换成flac? metaflac这个软件你 ...

我发现其实就是METAFLAC的批处理命令,下载了METAFLAC,程序是命令行操作的,不过看不大懂说明文件,我又没有批处理的基础,https://xiph.org/flac/documentation_tools_metaflac.html
回复

使用道具 举报

发表于 2019-5-26 11:12:28 | 显示全部楼层
本帖最后由 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是不需要的。
回复

使用道具 举报

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

点评

https://qiubuyi.me/?p=830我是看了这个贴子,按照你的操作后还是一样的NO FOUND提示  详情 回复 发表于 2019-5-26 15:33
回复

使用道具 举报

 楼主| 发表于 2019-5-26 15:33:01 | 显示全部楼层
yexingqi 发表于 2019-5-26 11:18
另外,你这个脚本的要求是: 查找当前目录下面有没有*.cue的文件:
find -name \*.cue ! -name "._*" | wh ...

https://qiubuyi.me/?p=830我是看了这个贴子,按照你的操作后还是一样的NO FOUND提示
回复

使用道具 举报

发表于 2019-5-26 17:24:23 | 显示全部楼层
你修改成这样:
#!/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

如果仍然出错,把所有出错的信息贴出来(这是调试模式)

点评

非常感谢,我i现在先在虚拟机测试,如果不行,再到实体机测试。对了,MACOS可以运行这个脚本吗?  详情 回复 发表于 2019-5-27 04:51
回复

使用道具 举报

 楼主| 发表于 2019-5-27 04:51:21 | 显示全部楼层
yexingqi 发表于 2019-5-26 17:24
你修改成这样:
#!/bin/sh
set -x

非常感谢,我i现在先在虚拟机测试,如果不行,再到实体机测试。对了,MACOS可以运行这个脚本吗?
回复

使用道具 举报

发表于 2019-5-27 05:48:26 | 显示全部楼层
高手如云!
回复

使用道具 举报

发表于 2019-5-27 06:04:26 来自手机 | 显示全部楼层
一般shell脚本以#!/bin/xxsh开头,用来给命令解释器看的,脚本就知道用那个命令解释器运行,如bash,zsh或者csh等。
回复

使用道具 举报

发表于 2019-5-27 06:08:06 来自手机 | 显示全部楼层
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 - 用原来的是这样的  详情 回复 发表于 2019-5-27 13:27
METAFLAC就是FLAC的软件  详情 回复 发表于 2019-5-27 13:18
回复

使用道具 举报

 楼主| 发表于 2019-5-27 13:18:38 | 显示全部楼层
my9823 发表于 2019-5-27 06:08
macos是基于bsd的,而bsd是基于unix,你可以试试看,metaflac是个软件名吧?

METAFLAC就是FLAC的软件
回复

使用道具 举报

 楼主| 发表于 2019-5-27 13:27:19 | 显示全部楼层
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")

回复

使用道具 举报

 楼主| 发表于 2019-5-27 14:33:07 | 显示全部楼层
wintoflash 发表于 2019-5-27 13:38
你用的是macOS啊,那编辑脚本之后的换行符不对。

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

W大你好。我只是在虚拟机用ubuntu,但是我有黑苹果,不知道MAC有没有METAFLAC
回复

使用道具 举报

 楼主| 发表于 2019-5-28 04:42:18 | 显示全部楼层
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
回复

使用道具 举报

 楼主| 发表于 2019-5-28 04:45:47 | 显示全部楼层
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
回复

使用道具 举报

 楼主| 发表于 2019-5-28 04:52:19 | 显示全部楼层
此问题已解决,运行APT-GET INSTALL FLAC后,终端进入CUE和FLAC文件所在目录,再SUDO运行经WINTOFLASH大大修改过的SH文件就完美运行了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-18 16:09

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表