自动查找并删除文件名中的常用词

自动查找并删除文件名中的常用词

我使用的是 Mac OS 10.8.4,想使用终端(我认为是 bash shell)进行批量重命名。我有大量文件夹,里面有大量文件。文件名中包含与文件夹中其他文件相同的单词,我想检测并删除这些单词(不包括文件后缀)。

例如:

文件夹 1 包含文件:

blo 123b 2blah 5blah.pdf
blo hazel 124 2blah 5blah.pdf
blo 125 2blah 5blah.pdf

文件夹 2 包含文件:

534a blee9.pdf
b546 blee9.pdf
back 675 blee9.pdf

我想将它们重命名为

文件夹 1

123b.pdf
hazel 124.pdf
125.pdf

文件夹 2

534a.pdf
b546.pdf
back 675.pdf

我有可以查找和替换的应用程序,但这些应用程序需要我手动指定要查找的内容。但如果不手动查找,我就不会提前知道这些是什么。此外,可能需要替换的单词可能不止一个。

所以我想我可以做这样的事情:

for each folder {
list all the filenames > output.txt
use grep, replace all word breaks with carriage returns
sort the list alphabetically
use uniq in some way to detect the words I want to remove, and list them
iteratively remove all these words from the file names
}

一些额外的注意事项:“单词”可能包含 =、-、+ 等字符。我想使用 [空格] 作为单词分隔符。

有人能帮忙吗?

答案1

我会在 perl 中做这件事,因为我不太擅长使用 bash。

  1. 递归循环遍历所有文件夹(寻找树遍历算法,相当简单)
  2. 对于每个文件夹,列出所有文件ls
  3. 用来split(' ', sfilename);制作所用单词的列表。插入列表中@common_words
  4. 对于每个下一个文件,以相同的方式拆分其名称,并删除不在@common_words. 中的任何单词$filename(例如,使用 perl 的 grep,或使用循环)
  5. 获得常用单词列表后,重新循环遍历文件,并针对每个文件
  6. 对于每个文件,对于每个单词,重命名文件以删除该单词(使用 bashmv和 perl 的system
  7. 完毕。

这是启动脚本这需要重新加工但可以解决您的问题。

问题 :

  • 如果你的文件全部以“_word.ext”结尾,则扩展名将被删除
  • 如果取消注释忽略扩展名的替换,则 mv 不再起作用,因此您必须将名称保存在哈希中:name_without_extention => "name_with_extension'
  • 它只解析单个文件夹并使用子文件夹名称,因此您必须确保在没有子文件夹的文件夹中使用它。

现在就由你来改进它了=)

答案2

我已经为一个目录中的文件编写了代码。首先,我在终端中导航到该目录,然后运行 ​​Python 脚本。它可以很好地删除文件名的部分内容,例如“720dpi”,而无需事先知道确切的文本。我是 Python 初学者,因此代码可能需要改进。

http://pastebin.com/Eb0cQyKd

相关内容