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文件删除它。如果我能先用日志记录一下变化,然后再深入研究它,那就太好了。
感谢您的阅读
发布于 2020-05-05 02:47:50
shell可以做一些很酷的字符串处理,比如截断字符串两端的子字符串:
find . -name '*Unknown.pdf' |
while read file; do
mv "$file" "${file%.Unknown.pdf}.pdf"
done如果要进行演练,请将其设置为echo mv ...。
阅读shell手册中关于参数扩展的部分,了解所有这些%、%%、#和## chop函数。
发布于 2020-05-05 03:09:41
试试下面这一条:
find . -type f -name "*Unknown*" | rename 's/(.*).Unknown(.*)(csv|pdf)/$1$2$3/' 它可以从除first和last之外的任何位置删除'.Unknown‘,或者这个位置:
find . -type f -name "*Unknown*" | rename 's/(.*)Unknown.(csv|pdf)/$1$2/'是否应从紧接在扩展名pdf或csv之前的位置移除'.Unknown‘
编辑:
如果您需要演练版本,您可以使用sed和标准输出来代替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.pdfhttps://stackoverflow.com/questions/61598958
复制相似问题