然而,我发现在浏览大量文档时 .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
是不同的野兽。