首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash:上下目录

Bash:上下目录
EN

Stack Overflow用户
提问于 2022-07-09 12:27:25
回答 2查看 60关注 0票数 0

亲爱的堆叠溢出社区,

我刚开始使用bash,我遇到了一个关于循环和目录的问题(下面的代码)。因此,我在操作系统目录中工作,并希望在子目录中查找.wav文件。但是,如果我将"for“部分中的目录更改为test-音频/*..wav,它可能会找到..wav文件,但是主操作确实可以访问必要的配置文件"IS10_paraling.conf”。在主操作中,目录必须写在"-C“之后,所以目录之前没有"/”。

如果wav文件在opensmile目录中,而不是在子目录中,则我的循环工作。我想在子目录测试音频中查找文件,而主操作仍然可以访问所有的操作系统目录。

因此,基本上:如何在for循环中上下目录?

非常感谢您提前!

这行得通

代码语言:javascript
运行
复制
#! /bin/bash
cd /usr/local/opensmile/

for f in *.wav; 
do
/usr/local/opensmile/build/progsrc/smilextract/SMILExtract -C config/is09-13/IS10_paraling.conf -I $f -D output/$f.csv ;
done

这不管用

代码语言:javascript
运行
复制
#! /bin/bash
cd /usr/local/opensmile/

for f in test-audio/*.wav; 
do
/usr/local/opensmile/build/progsrc/smilextract/SMILExtract -C config/is09-13/IS10_paraling.conf -I $f -D output/$f.csv ;
done
EN

回答 2

Stack Overflow用户

发布于 2022-07-10 05:43:49

说“这不管用”,并不能告诉我们任何事情。会发生什么?有错误消息吗?

然而,您的问题是“基本上:如何在for循环中上下目录?”

如果我想在循环中上下目录,我将在子subshell中这样做,这样我就可以确保下次进入循环时我将回到原来的位置。所以我会把我所有的命令放进( )里。

代码语言:javascript
运行
复制
#! /bin/bash
cd /usr/local/opensmile/
CONFIG=$PWD/config
OUTPUT=$PWD/output

for f in test-audio/*.wav; 
do
 (
  cd test-audio
/usr/local/opensmile/build/progsrc/smilextract/SMILExtract -C $CONFIG/is09-13/IS10_paraling.conf -I `basename $f` -D $OUTPUT/$f.csv
 )
done

虽然为什么在这件案子中需要这样做,我还是搞不懂

票数 0
EN

Stack Overflow用户

发布于 2022-07-11 04:33:04

与其使用for循环,不如使用find进行以下操作:

find /usr/local/opensmile/ -type f -name "*.wav" -exec /usr/local/opensmile/build/progsrc/smilextract/SMILExtract -C config/is09-13/IS10_paraling.conf -I $1 -D output/$1.csv "{}" \;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72921352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档