我正在尝试运行一个脚本:
#!/bin/bash
echo "Please enter desired kbps example 1000 for 1000kbps: "
read desired
echo "Please enter minimum kbps: "
read minrate
echo "Please enter maximum kbps: "
read maxrate
for i; do
filename=$(basename "$i")
extension="${filename##*.}"
filename="${filename%.*}"
size=k
d=$(dirname "$i")
# b=$(basename "$i")
ffmpeg -i "$i" -c:v hevc_nvenc -preset medium -crf 28 -b:v $desired$size -minrate $minrate$size -maxrate $maxrate$size -bufsize 25M -c:a copy "$d/X265_$filename.mp4"
mv "$i" "$d/zzz_$filename.$extension"
done在xargs中使用这个find命令:
find ./ -type f -regex ".*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\|avi\)" -print0 | xargs -0 /root/batch.sh我希望它能提示我一次请求比特率变量,但是在使用find命令时它不会暂停获取信息,但是如果我直接运行脚本,它就会这样做。
有没有办法将find命令组合到另一个脚本中,使其成为一个简单的命令,然后提示我输入信息?如果没有,我怎样才能让它提示我呢?
发布于 2016-11-09 21:28:20
问题是shell脚本继承了来自xargs的标准输入,而它的输入是来自find的管道。所以剧本正试着从那个管道里读出来。
如果可以修改脚本,请将其更改为从/dev/tty读取输入,而不是标准输入。把它放在脚本的开头:
exec </dev/tty发布于 2016-11-09 21:54:12
您可以使用xargs命令的-exec ... +选项完全省略find部件。
这里有一个和你的剧本相似的剧本
$ cat test.sh
#!/bin/sh
read a
for i ; do echo -n $i.$a' ' ; done
echo
$一个有几个文件的目录(这些文件名有嵌入的空格)
$ ls -1 one
1 1
2 1
3 1
4 1
$最后给出了一个使用find和-exec ... +选项的示例
$ find one -type f -exec sh test.sh '{}' '+'
asdef
one/2 1.asdef one/3 1.asdef one/1 1.asdef one/4 1.asdef
$PS,我编辑了我的答案,以反映OP对文件名和空格等的关注。幸运的是,find自己处理问题,任何问题。
https://stackoverflow.com/questions/40516141
复制相似问题