【问题标题】:OS X bash For loop only processes one file in a directoryOS X bash For 循环只处理目录中的一个文件
【发布时间】:2015-11-19 19:28:10
【问题描述】:

我正在尝试让此代码处理目录中的所有文件:https://github.com/kieranjol/ifi-ffv1/blob/master/ifi-ffv1.sh

我在终端中运行它并将路径添加到文件./ifi-ffv1.sh /path/to/file.mov。我怎样才能让它进入下一个?我还需要确保它只处理 AV 文件,例如 .avi/.mkv/*.mov 等。

我尝试过使用带有 shift 的 while 循环,但我也无法让它工作。

我尝试添加一个像这里这样的特定路径,但我失败了 http://www.cyberciti.biz/faq/unix-loop-through-files-in-a-directory/

我已经尝试过这个https://askubuntu.com/a/315338,它不断循环同一个文件,而不是移动到下一个文件。 http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html 这对我也没有帮助。

我知道这将是一个非常简单的解决方案,但我对此很陌生。

【问题讨论】:

  • 有很多方法可以“处理”文件;你到底想完成什么?
  • 你试过for f in /path/to/*.avi /path/to/*.mkv path/to/*.mov; do ./ifi-ffv1.sh $f; done吗?
  • 感谢您的回复。我想在一个目录中的多个文件上运行我在 github 上编写的代码,一次一个。它转码、运行校验和、创建元数据 xml 等。@m7thon,你的意思是我用你的代码制作了第二个 bash 脚本吗?
  • 说实话,我不太明白你的问题。如果您想在目录中的多个文件上运行脚本ifi-ffv1.sh,我编写的命令应该可以解决问题(在 bash 文件中,或者只是在命令行中)。那么你真的想改变脚本本身,以便在给定目录中特定类型的所有文件上运行吗?
  • 对不起,我不清楚。是的,我想更改代码,以便它在目录中特定类型的所有文件上运行。但是,我想将目录保留为变量,以便我转到终端,键入 ./ifi-ffv1.sh /path/to/file.mov 并在该文件上运行脚本,并在目录。

标签: macos bash for-loop ffmpeg


【解决方案1】:

您的代码中实际上没有任何类型的循环。你需要做类似的事情

for file in path/to/*.avi path/to/*.avg
do
  ./ifi-ffv1.sh "$file"
done

它将遍历所有指定的文件并将每个文件替换为$1

您可以输入任何您想要的文件名,而不是 path/to/*.avi path/to/*.avg。如果你先cd到目录,你可以省略路径,直接使用*.avi *.avg

要在一个脚本中完成所有操作,请执行以下操作:

cd <your directory>
for file in *.avi *.avg
do
    <your existing script here>
done

将脚本中的所有$1 替换为"$file"(当然,不会复制您已有的任何引号)

【讨论】:

  • 请考虑在“$file”两边加上双引号,以防任何文件的名称中有空格。
  • 那么我是否必须在代码中设置目录,而不是将其保留为变量?例如,我只能将文件添加到一个目录中的脚本中吗,例如 /files_to_transcode?现在,我可以从任何目录添加一个文件,并且脚本可以正常工作。我想以类似的方式使用脚本,在终端上输入单个文件的路径,但它会选择目录中的所有其他 .mov 或 .mkv 文件。
  • 谢谢!我使用了您的代码并将路径/到/更改为包含我的文件的目录。我通过创建另一个 bash 文件来做到这一点。我仍然想编辑我的原始代码,以便它执行目录中的所有文件而不必使用第二个脚本,但我对这个解决方案非常满意。你对路径的建议是 cd也有帮助。
猜你喜欢
  • 2011-12-18
  • 2011-09-11
  • 2017-04-11
  • 2021-12-14
  • 2014-10-30
  • 2013-04-24
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多