Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 洗牌查找使用空格的结果_Linux_Bash - Fatal编程技术网

Linux 洗牌查找使用空格的结果

Linux 洗牌查找使用空格的结果,linux,bash,Linux,Bash,我正在搜索WAV格式的所有文件,并从中创建一个输出文件,如下所示: #!/usr/bin/env bash AUDIO_PATH="$1" OUTPUT_FILE="$2" SEED="$3" get_fixed_random() { openssl enc -aes-256-ctr -pass pass:$SEED -nosalt </dev/zero 2>/dev/null } AUDIO_FILES=$(fi

我正在搜索WAV格式的所有文件,并从中创建一个输出文件,如下所示:

#!/usr/bin/env bash

AUDIO_PATH="$1"
OUTPUT_FILE="$2"
SEED="$3"

get_fixed_random()
{
  openssl enc -aes-256-ctr -pass pass:$SEED -nosalt </dev/zero 2>/dev/null
}

AUDIO_FILES=$(find -L $AUDIO_PATH -name '*.wav' | shuf --random-source=<(get_fixed_random))

# This writes all WAV to a single output file
for file in $AUDIO_FILES; do
    [ ! -e "$file" ] || ffmpeg -i "$file" -f s16le -ac 1 -ar 48000 -
done > $OUTPUT_FILE

构造,但我无法获得正确的语法。帮助?

不要对$something中的文件使用
。阅读

请使用检查脚本

要处理空白,请使用零分隔流

在shell中,尝试编写一个长管道。沿着:

find -L "$AUDIO_PATH" ... -print0 |
shuf -z ... |
xargs -0 -I{} ffmpeg -i {} ... - > "$OUTPUTFILE"
更喜欢在脚本中使用小写变量

GNU工具支持
-z
-0
-print0
等选项


您可以使用
xargs-p
来并行执行,但这会影响输出。您可以探索GNU
parallel
来并行化执行,并保持顺序输出。

要读取零分离流,首先必须有零分离流<代码>[!-e“$file”]| |-双重否定?为什么不
[-e…]&&
?查找文件后检查文件是否存在有什么原因吗?
find-L$AUDIO\u PATH
如果
$AUDIO\u PATH
包含空格,则会中断。请熟悉引用的原则以及它如何影响Bash中的分词:@DanielKamilKozar我知道,这就是问题的重点。引用的帖子对此进行了详细讨论,只是我不知道如何应用正确的解决方案。@KamilCuk这里有cargo cult编程的元素。正如您所指出的,该检查没有多大意义。感谢您提供有关bash编程的额外提示。该方法比原来的方法更干净,工作完美无瑕。
find -L "$AUDIO_PATH" ... -print0 |
shuf -z ... |
xargs -0 -I{} ffmpeg -i {} ... - > "$OUTPUTFILE"