读取循环时只执行一次Shell脚本
发布时间:2020-12-15 18:57:17 所属栏目:安全 来源:网络整理
导读:我正在编写一个shell脚本,通过 Handbrake从我的相机批处理.mov文件以节省高清空间.该脚本使用’find’搜索目录,然后在找到的每个.mov文件上运行Handbrake,将生成的文件的创建日期与源文件的日期匹配为’touch’. 我最初使用for循环执行此操作: for i in $(f
我正在编写一个shell脚本,通过
Handbrake从我的相机批处理.mov文件以节省高清空间.该脚本使用’find’搜索目录,然后在找到的每个.mov文件上运行Handbrake,将生成的文件的创建日期与源文件的日期匹配为’touch’.
我最初使用for循环执行此操作: for i in $(find "$*" -iname '*.mov') ; do ~/Unix/HandbrakeCLI --input "$i" --output "$i".mp4 --preset="Normal" touch -r "$i" "$i".mp4 done 这有效,但如果输入文件的文件名中有空格,则会失败.所以我尝试了一个while循环: find "$*" -iname '*.mov' | while read i ; do ~/Unix/HandbrakeCLI --input "$i" --output "$i".mp4 --preset="Normal" touch -r "$i" "$i".mp4 done 这个循环的问题是它适用于目录中的第一个文件,然后退出循环.请注意,如果我在while循环体中替换“echo $i”,它会打印目录中的所有.mov文件,因此循环结构正确. 我相信在this stackoverflow thread我的问题有一个部分答案.但是解决方案是特定于ssh并不能解决一般问题.似乎与子进程使用的stdin有关,但我不完全理解它是如何工作的. 任何建议? 我在OSX 10.6上
你可能正在运行shellopt’-e'(退出错误)
尝试 set +e (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- shell解析命令行的过程以及eval命令
- 批处理文件 – 什么是bash的set -e的cmd.exe替代品?
- bash – 是否可以从子shell获取退出代码?
- twitter-bootstrap – 集成bootstrap-tagsinput,boostrap3-
- 如何在列表中找到匹配的元素并将其映射为Scala API方法?
- angularjs – 将$http响应对象保存为$scope变量
- ptrace_detach,SIGINT和跟踪/断点陷阱(核心转储)
- 死命简单的webpack(4) - 引入bootstrap
- postgresql – 无法从Windows主机上运行的PGAdmin连接到Do
- angularjs – Angular-google-map界限示例