自动重命名文件 bash 脚本

自动重命名文件 bash 脚本

我的驱动器上有很多带有 .odt 扩展名的文档。例如: 在此处输入图片描述

然而,我发现在浏览大量文档时 .odt 会分散我的注意力。

因此,我设法编写了这个脚本(removeODT.sh):

#!/bin/bash

for file in *.odt
do
 mv "$file" "${file%.odt}"
done

这将从我执行脚本的目录中的 .odt 文件中删除 .odt 扩展名。

例如在 ~/Desktop/MyDocuments 中打开终端并输入

sh /home/user1/BashScripts/removeODT.sh

这将从 MyDocuments 中的所有文件中删除 .odt 扩展名。

但删除扩展名之后,我无法在其他操作系统上使用这些文件,也无法用搜索文档的内容loook

为了解决这个问题,我创建了第二个脚本,以便在需要时添加 .odt 扩展名(addODT.sh):

#!/bin/bash

for file in *
do
 mv "$file" "${file%}.odt"
done

现在,我想要做的是让这些脚本改变指定父目录及其所有子目录中的每个文档,而不是像现在这样只改变单个目录。

例如“从 Documents 及其所有子文件夹中的文件中删除 .odt 扩展名”

这样我就可以用一个脚本更改所有文件,而不必为每个文件夹单独执行脚本。但我对此还很陌生,所以我不知道该怎么做。

PS 一个理想的解决方案是在 Nautilus 中隐藏 .odt 扩展名,但据我所知这是不可能的。

答案1

您可以使用find它来递归遍历目录。

find -type f -exec mv {} {}.odt \;

删除扩展有点麻烦:

find -name '*.odt' -exec bash -c 'f={}; mv "$f" "${f%.odt}"' \;

但您也可以创建一个脚本来删除扩展并从 find 中调用它以使其更简单:

find -name '*.odt' -exec remove_odt.sh {} \;

正如您所猜测的,{}将被替换为每个文件的名称exec,最后\;表示要执行的命令在哪里结束。

另外,不要用它sh来运行bash脚本,sh它们bash是不同的野兽。

相关内容