首页 > 解决方案 > 如何仅针对 .csv 和 .pdf 文件从文件名中查找和删除“未知”

问题描述

Ubuntu 18.04。我有一个顶级文件夹,下面有数千个文件夹和文件,深度很多。很多文件的标题中都有“未知”,我想删除这些文件,而无需手动操作。

StJamesRow.2010.Unknown.pdf > StJamesRow.2010.pdf

StJamesRow.2010.Unknown.csv > StJamesRow.2010.csv

MarbleArch.2015.Unknown.pdf > MarbleArch.2015.pdf

MarbleArch.2015.Unknown.csv > MarbleArch.2015.csv

我想在顶层运行一个命令并让它递归下来。如果在文件夹标题中发现未知,则不应从文件夹名称中删除“未知”。仅应为 csv 和 pdf 文件删除它。如果我可以先用更改日志干运行它,然后再一头扎进它,那就太好了。

谢谢阅读

标签: bashrename

解决方案


试试这个衬里:

find . -type f -name "*Unknown*" | rename 's/(.*).Unknown(.*)(csv|pdf)/$1$2$3/' 

它可以从除第一个和最后一个位置之外的任何位置删除“.Unknown”,或者这个:

find . -type f -name "*Unknown*" | rename 's/(.*)Unknown.(csv|pdf)/$1$2/'

如果 '.Unknown' 应该从扩展 pdf 或 csv 之前的位置删除

编辑:

如果您需要试运行版本,您可以使用sed和 stdout 代替rename

find . -type f -name "*Unknown*" | sed 's/\(.*\)Unknown.\(csv\|pdf\)/\1Unknown.\2 -> \1\2/'

这给出了输出:

./StJamesRow.2010.Unknown.csv -> ./StJamesRow.2010.csv
./MarbleArch.2015.Unknown.pdf -> ./MarbleArch.2015.pdf

推荐阅读