繁体   English   中英

批处理文件转换为Linux脚本

[英]Batch file convert to Linux script

由于将批处理作业迁移到Linux服务器,因此在查找Linux中以下命令的等效项时遇到问题:

Y驱动器是NAS驱动器的映射驱动器,NAS驱动器也连接到Ubuntu服务器/ NAS / CCTV。 需要在每个子文件夹中搜索所有.264文件

Z驱动器位于Ubuntu服务器本身。 只需将每个.mp4文件移到此处,这里就没有文件夹。 Ubuntu上的路径是/ Share / CCTV /

它只是一个简单的脚本,可以将CCTV捕获.264格式转换为mp4,然后移至服务器进行处理并删除任何h264文件和任何早于1天的文件夹,该脚本将计划每3分钟运行一次。

我在Ubuntu服务器上安装了ffmpeg,只是无法在文件夹中找到每个文件的来进行相同的操作。

同样对于最后一个文件删除命令,该文件删除早于1天的文件夹

FOR /r y:\ %%F in (*.h264) do c:\scripts\ffmpeg -i %%F %%F.mp4

FOR /r y:\ %%F in (*.h264) do del %%F

FOR /r y:\ %%G in (*.mp4) do move %%G Z:\

forfiles -p "Y:\" -d -1 -c "cmd /c IF @isdir == TRUE rd /S /Q @path"

感谢任何形式的帮助或向我指出正确的指南,以便我可以在Linux服务器上重写它。 我确实尝试搜索循环,但都显示计数,可能是我搜索错误。

for f in /NAS/CCTV/*.h264; do ffmpeg -i "$f" "$f".mp4; done
rm /NAS/CCTV/*.h264
mv /NAS/CCTV/*.mp4 /Share/CCTV
find /NAS/CCTV/ -type d -ctime +1 -exec rm -rf {} \;

查找所有.h264文件(递归)

find /NAS/CCTV -type f -name '*.h264'

将所有此类文件转换为.mp4

while IFS= read -d '' -r file ; do
    ffmpeg -i "$file" "$file".mp4
done < <(find /NAS/CCTV -type f -name '*.h264' -print0)

请注意,这将创建名为filename.h264.mp4类的filename.h264.mp4 这符合您的批处理文件行为。 如果您希望替换扩展名,请使用ffmpeg -i "$file" "${file%.*}".mp4代替,您将得到一个类似filename.h264的名称。

还将这些mp4文件移动到另一个目录

while IFS= read -d '' -r file ; do
    ffmpeg -i "$file" "$file".mp4
    if [[ -f $file.mp4 ]] ; then
        mv -f -- "$file".mp4 /Share/CCTV
    fi
done < <(find /NAS/CCTV -type f -name '*.h264' -print0)

删除旧目录(递归)

find /NAS/CCTV -type d -not -newermt '1 day ago' -exec rm -rf {} +

文档。

find命令根据您指定的条件递归列出文件。 每当您需要处理多个目录中的文件或大量文件时,它可能就是您想要使用的。 为了防止恶意文件名的安全,重要的是-print0因此文件名用null而不是换行符分隔,然后需要使用IFS= read -d ''构造稍后进行解释。

while read variable ; do ... done while read variable ; do ... done构造从输入读取数据,并将每个记录分配给命名变量。 这允许在循环内一次处理每个匹配文件。 循环的内部应该非常明显。

再次使用find来选择文件,但是在这种情况下,文件是目录。 开关-not -newer根据它们的m时间(即修改时间)与t相比,选择not newer文件(换句话说,较旧的文件),在这种情况下,这意味着下一个参数是描述时间的文本。 在这里,您可以使用GNU date-d开关可以理解的任何表达式,因此我可以用简单的英语编写,它将按预期运行。

在开始执行Shell脚本的过程中,您应该坚持两件事:

  • shellcheck-始终运行通过shellcheck编写的脚本以捕获基本错误。
  • Bash FAQ-在wooedge.org上的bash FAQ。 您尚未想到的问题的大多数答案都将在这里。 例如, FAQ 15与该问题高度相关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM