首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >巴什脚本与Prompts从Xargs?

巴什脚本与Prompts从Xargs?
EN

Stack Overflow用户
提问于 2016-11-09 21:14:38
回答 2查看 168关注 0票数 2

我正在尝试运行一个脚本:

代码语言:javascript
复制
#!/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命令:

代码语言:javascript
复制
find ./ -type f -regex ".*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\|avi\)" -print0 | xargs -0 /root/batch.sh

我希望它能提示我一次请求比特率变量,但是在使用find命令时它不会暂停获取信息,但是如果我直接运行脚本,它就会这样做。

有没有办法将find命令组合到另一个脚本中,使其成为一个简单的命令,然后提示我输入信息?如果没有,我怎样才能让它提示我呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-09 21:28:20

问题是shell脚本继承了来自xargs的标准输入,而它的输入是来自find的管道。所以剧本正试着从那个管道里读出来。

如果可以修改脚本,请将其更改为从/dev/tty读取输入,而不是标准输入。把它放在脚本的开头:

代码语言:javascript
复制
exec </dev/tty
票数 3
EN

Stack Overflow用户

发布于 2016-11-09 21:54:12

您可以使用xargs命令的-exec ... +选项完全省略find部件。

这里有一个和你的剧本相似的剧本

代码语言:javascript
复制
$ cat test.sh
#!/bin/sh
read a
for i ; do echo -n $i.$a' ' ; done
echo
$

一个有几个文件的目录(这些文件名有嵌入的空格)

代码语言:javascript
复制
$ ls -1 one
1 1
2 1
3 1
4 1
$

最后给出了一个使用find-exec ... +选项的示例

代码语言:javascript
复制
$ 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自己处理问题,任何问题。

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

https://stackoverflow.com/questions/40516141

复制
相关文章

相似问题

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