亲爱的堆叠溢出社区,
我刚开始使用bash,我遇到了一个关于循环和目录的问题(下面的代码)。因此,我在操作系统目录中工作,并希望在子目录中查找.wav文件。但是,如果我将"for“部分中的目录更改为test-音频/*..wav,它可能会找到..wav文件,但是主操作确实可以访问必要的配置文件"IS10_paraling.conf”。在主操作中,目录必须写在"-C“之后,所以目录之前没有"/”。
如果wav文件在opensmile目录中,而不是在子目录中,则我的循环工作。我想在子目录测试音频中查找文件,而主操作仍然可以访问所有的操作系统目录。
因此,基本上:如何在for循环中上下目录?
非常感谢您提前!
这行得通
#! /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
这不管用
#! /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
发布于 2022-07-10 05:43:49
说“这不管用”,并不能告诉我们任何事情。会发生什么?有错误消息吗?
然而,您的问题是“基本上:如何在for循环中上下目录?”
如果我想在循环中上下目录,我将在子subshell中这样做,这样我就可以确保下次进入循环时我将回到原来的位置。所以我会把我所有的命令放进( )里。
#! /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
虽然为什么在这件案子中需要这样做,我还是搞不懂
发布于 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 "{}" \;
https://stackoverflow.com/questions/72921352
复制相似问题