首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在所有子文件夹中运行命令

在所有子文件夹中运行命令
EN

Unix & Linux用户
提问于 2023-01-20 11:10:35
回答 4查看 73关注 0票数 1

我想在所有子文件夹中运行以下命令:

代码语言:javascript
复制
for f in *.mp4; do
ffmpeg -i "${f}" -c:v libx264 -b:v 1.5M -c:a aac "tmp_${f}" && mv "tmp_${f}" "${f}"
done

文件夹结构:在基本文件夹2019中,我想在所有子文件夹中执行命令。每个月都有一个文件夹,即1月的"/home/okr/test/2019/01/“。

EN

回答 4

Unix & Linux用户

发布于 2023-01-20 11:16:14

递归地:

代码语言:javascript
复制
shopt -s globstar

for f in **/*.mp4; do
    ffmpeg -i "${f}" -c:v libx264 -b:v 1.5M -c:a aac "${f}.tmp" && mv "${f}.tmp" "${f}"
done
票数 0
EN

Unix & Linux用户

发布于 2023-01-20 11:18:46

我认为您想要的是将cd放入每个子文件夹并运行命令,您可以这样做:

代码语言:javascript
复制
for dir in */; do
 ( 
  cd "$dir"
  for f in ./*.mp4; do
    ffmpeg -i "${f}" -c:v libx264 -b:v 1.5M -c:a aac "tmp_${f}" && mv "tmp_${f}" "${f}"
  done
 )
done

(括号打开一个子shell,它允许您在子shell中cd而不影响您在父shell中的位置)/

或者您只想递归地查找所有mp4文件并对它们运行命令,您可以这样做:

代码语言:javascript
复制
shopt -s globstar
for f in **/*.mp4; do
  ffmpeg -i "${f}" -c:v libx264 -b:v 1.5M -c:a aac "${f}.tmp" && mv "${f}.tmp" "${f}"
 done

globstar选项为您提供了**,它来自(man bash):

如果设置,则路径名称扩展上下文中使用的模式**将匹配所有文件以及零或多个目录和子目录。如果模式后面跟着一个/,那么只有目录和子目录匹配。

票数 0
EN

Unix & Linux用户

发布于 2023-01-20 11:30:10

下面的命令将递归地搜索当前目录的所有子文件夹,查找具有.mp4扩展名(-name "*.mp4")的文件,并使用-exec选项对每个文件执行ffmpeg命令。

代码语言:javascript
复制
for f in *.mp4; do
  ffmpeg -i "${f}" -c:v libx264 -b:v 1.5M -c:a aac "tmp_${f}" && 
    mv "tmp_${f}" "${f}"
done 
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/732451

复制
相关文章

相似问题

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