bash - 如何仅针对 .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 文件删除它。如果我可以先用更改日志干运行它,然后再一头扎进它,那就太好了。
谢谢阅读
解决方案
试试这个衬里:
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
推荐阅读
- ocaml - 使用 Ocaml StringMap.find_opt 时遇到未绑定值错误
- microservices - 微服务是否应该在向其他微服务发出请求之前调用健康检查?
- python - 尝试使用 pygame 创建声音时出错
- couchbase - 如何提示 Couchbase 模式推断以使用我的“类型”字段?
- windows - 当我们粘贴文本时,如何自动化 cmd bat 文件来执行命令?
- mysql - 为什么mysql存储函数不断删除所有行?
- swift - 我试图在用户键入时从 firebase 读取数据,但出现此错误:线程 1: EXC_BAD_ACCESS (code=2, address=0x7ffeed614ff8)
- pyspark - 如何根据同一列的条件更改 PySpark 数据框中的值?
- hibernate - WebLogic 12C 应用服务器版本-12.2.1.2.0 类加载器问题
- time - 算法的时间复杂度(伪代码)