使用 find [重复] 在 bash 中操作字符串(文件扩展名)
Posted
技术标签:
【中文标题】使用 find [重复] 在 bash 中操作字符串(文件扩展名)【英文标题】:Manipulating strings (file extensions) in bash using find [duplicate] 【发布时间】:2016-09-24 08:27:14 【问题描述】:我在 bash 中处理字符串时遇到问题。我想重写扩展。
我在下载目录中有以下 2 个文件
示例 001.mkv 示例 002.mkv使用下面的脚本,我总是返回相同的文件名,而无需将 .mkv 重写为 .mp4。
find /Downloads -name \*.mkv -execdir echo $(file=; echo $file/mkv/mp4;) \;
我知道这不是重新格式化文件所需的全部内容,但此脚本是传递给 FFMPEG 的较大脚本的一部分。
这是 FFMPEG 的完整命令。
find /Downloads -name \*.mkv -execdir ffmpeg -i -vcodec copy -acodec copy $(file=; echo $file/mkv/mp4;) \;
【问题讨论】:
我已经尝试了该帖子中的许多示例,但仍然没有运气。我已经添加了我正在使用的完整命令。 您可以尝试在 -execdir 命令之后使用 bash -c,查看我的答案以获取示例。 【参考方案1】:你可以尝试使用 bash -c 来执行你的命令
find /Downloads -name \*.mkv -execdir bash -c 'file=; echo $file/.mkv/.mp4' \;
【讨论】:
【参考方案2】:exec 和 execdir 通常用于实际执行命令,而不是回显/打印有关找到的文件的信息 (print/printf)。
有几种方法可以做到这一点,这里有一种。
您可以先尝试使用 rename 命令,该命令可以使用正则表达式替换来重命名文件。这将需要将所有文件重命名为位于同一文件夹 /Downloads 中:(语法可能非常取决于发行版附带的重命名实现)
ls *.mkv
a.mkv b.mkv
rename .mkv .mp4 *.mkv
ls *.mp4
a.mp4
b.mp4
假设 mkv 文件也存在于 /Downloads 的子目录中:
find . -type f -name "*.mkv"
./sundir/d.mkv
./sundir/c.mkv
./a.mkv
./b.mkv
find -type f -name "*.mkv" -exec rename .mkv .mp4 \;
find . -type f -name "*.mp4"
./sundir/c.mp4
./sundir/d.mp4
./b.mp4
./a.mp4
【讨论】:
以上是关于使用 find [重复] 在 bash 中操作字符串(文件扩展名)的主要内容,如果未能解决你的问题,请参考以下文章