首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅为.csv和.pdf文件查找和删除文件名中的“Unknown

如何仅为.csv和.pdf文件查找和删除文件名中的“Unknown
EN

Stack Overflow用户
提问于 2020-05-05 02:19:02
回答 2查看 49关注 0票数 0

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文件删除它。如果我能先用日志记录一下变化,然后再深入研究它,那就太好了。

感谢您的阅读

EN

回答 2

Stack Overflow用户

发布于 2020-05-05 02:47:50

shell可以做一些很酷的字符串处理,比如截断字符串两端的子字符串:

代码语言:javascript
复制
find . -name '*Unknown.pdf' |
while read file; do
    mv "$file" "${file%.Unknown.pdf}.pdf"
done

如果要进行演练,请将其设置为echo mv ...

阅读shell手册中关于参数扩展的部分,了解所有这些%、%%、#和## chop函数。

票数 0
EN

Stack Overflow用户

发布于 2020-05-05 03:09:41

试试下面这一条:

代码语言:javascript
复制
find . -type f -name "*Unknown*" | rename 's/(.*).Unknown(.*)(csv|pdf)/$1$2$3/' 

它可以从除first和last之外的任何位置删除'.Unknown‘,或者这个位置:

代码语言:javascript
复制
find . -type f -name "*Unknown*" | rename 's/(.*)Unknown.(csv|pdf)/$1$2/'

是否应从紧接在扩展名pdf或csv之前的位置移除'.Unknown‘

编辑:

如果您需要演练版本,您可以使用sed和标准输出来代替rename

代码语言:javascript
复制
find . -type f -name "*Unknown*" | sed 's/\(.*\)Unknown.\(csv\|pdf\)/\1Unknown.\2 -> \1\2/'

它给出了输出:

代码语言:javascript
复制
./StJamesRow.2010.Unknown.csv -> ./StJamesRow.2010.csv
./MarbleArch.2015.Unknown.pdf -> ./MarbleArch.2015.pdf
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61598958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档