在bash中使用find命令操作字符串(文件扩展名)

14 浏览
0 Comments

在bash中使用find命令操作字符串(文件扩展名)

我在bash中操作字符串时遇到了困难。我希望重新编写文件扩展名。\n我在Downloads目录中有以下两个文件:\n

    \n

  • Example 001.mkv
  • \n

  • Example 002.mkv
  • \n

\n使用下面的脚本,我总是得到相同的文件名,没有将.mkv重写为.mp4。\n

find /Downloads -name \*.mkv -execdir echo $(file={}; echo ${file/mkv/mp4};) \;

\n我知道这不足以重新格式化文件,但这个脚本是传递给FFMPEG的更大脚本的一部分。\n以下是带有FFMPEG的完整命令。\n

find /Downloads -name \*.mkv -execdir ffmpeg -i {} -vcodec copy -acodec copy $(file={}; echo ${file/mkv/mp4};) \;

0
0 Comments

在bash中使用find命令操作字符串(文件扩展名)时,可能会遇到一些问题。出现这些问题的原因是我们想要使用bash -c来执行命令,但是在这种情况下,我们需要特别注意语法和引号的使用。

解决这个问题的方法是使用以下命令:

find /Downloads -name \*.mkv -execdir bash -c 'file={}; echo ${file/.mkv/.mp4}' \;

这个命令的作用是在/Downloads目录中查找所有扩展名为.mkv的文件,并将其扩展名替换为.mp4。执行命令时,需要注意以下几点:

1. 使用-execdir而不是-exec。这是为了确保在文件所在的目录中执行命令,而不是在当前目录中执行。

2. 在-execdir之后的bash -c命令中,需要将要操作的文件路径赋值给一个变量file。这样我们就可以在后面的操作中使用这个变量。

3. 在echo命令中,使用${file/.mkv/.mp4}来将.mkv替换为.mp4。这是一种bash中操作字符串的方法。

通过上述方法,我们可以在bash中使用find命令操作字符串(文件扩展名),并实现我们想要的功能。

0
0 Comments

在bash中使用find操作字符串(文件扩展名)的问题是,exec和execdir通常用于实际执行命令,而不是打印有关找到的文件的信息。有几种方法可以解决这个问题,下面是其中一种方法。

首先,可以尝试使用rename命令来对文件进行重命名,该命令可以使用正则表达式进行替换。这需要将所有要重命名的文件放在同一个文件夹/Downloads中(语法可能会根据您发行版附带的rename实现而有所不同)。

假设mkv文件也存在于/Downloads的子目录中:

ls *.mkv
a.mkv  b.mkv
rename .mkv .mp4 *.mkv
ls *.mp4
a.mp4
b.mp4

如果要处理/Downloads目录及其子目录中的所有mkv文件,可以使用find命令:

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命令,可以找到/Downloads目录及其子目录中所有扩展名为mkv的文件,并使用rename命令将其扩展名改为mp4。最后,使用find命令再次找到所有扩展名为mp4的文件,以验证重命名是否成功。

0