Rts*_*e42 2 command-line bash scripts files batch-rename
但是,我发现 .odt 在浏览大量文档时会分散注意力。
所以,我设法编写了这个脚本(removeODT.sh):
#!/bin/bash
for file in *.odt
do
mv "$file" "${file%.odt}"
done
Run Code Online (Sandbox Code Playgroud)
这会从我执行脚本的目录中的 .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
Run Code Online (Sandbox Code Playgroud)
现在,我想做的是让这些脚本更改指定父目录及其所有子目录中的每个文档,而不是像现在那样只更改单个目录。
例如“从文档及其所有子文件夹中的文件中删除 .odt 扩展名”
这将允许我使用单个脚本更改我的所有文件,而不必分别为每个文件夹执行脚本。但我对此很陌生,所以我不知道如何去做。
PS 一个理想的解决方案是在 Nautilus 中隐藏 .odt 扩展名,但据我所知这是不可能的。
您可以使用find递归遍历目录。
find -type f -exec mv {} {}.odt \;
Run Code Online (Sandbox Code Playgroud)
删除扩展程序有点问题:
find -name '*.odt' -exec bash -c 'f={}; mv "$f" "${f%.odt}"' \;
Run Code Online (Sandbox Code Playgroud)
但是您也可以创建一个脚本来删除扩展并从 find 中调用它以使其更简单:
find -name '*.odt' -exec remove_odt.sh {} \;
Run Code Online (Sandbox Code Playgroud)
您可以猜到,{}将被每个文件名替换为exec,最后\;表示要执行的命令在哪里结束。
另外,不要sh用于运行bash脚本,sh并且bash是不同的野兽。