首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在语法nas上重命名文件名长度大于143个字符的文件

在语法nas上重命名文件名长度大于143个字符的文件
EN

Stack Overflow用户
提问于 2021-10-05 01:37:45
回答 1查看 718关注 0票数 1

我试图加密我们的语法Nas上的一个文件夹,但是已经发现了大约250个文件名超过143个字符。我是否可以使用任何命令从文件名的末尾删除所有字符,使其长度小于143个字符。

我用来查找文件的命令

代码语言:javascript
运行
复制
find . -type f -name '???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????*' 

我希望能够导航到8-9个左右的目录,这些目录保存这些文件块,并能够运行一行代码,找到名字大于n个字符的文件,并删除多余的字符,使其低于143个字符。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-05 04:33:54

我不熟悉语法,但是如果您有一个接受Perl regex替换的rename命令,并且您可以假设同一个目录中没有两个文件具有相同的143个字符前缀(或者在本例中丢失其中一个是可以接受的),我想如下所示

代码语言:javascript
运行
复制
find . -type f -regex '.*/[^/]\{143\}[^/]+' -exec rename 's%([^/]{143})[^/]+$%$1%' {} +

如果您没有这个版本的非标准rename命令,最简单的解决方案可能是将find的输出输送到Perl,然后将其输送到sh

代码语言:javascript
运行
复制
find . -type f -regex '.*/[^/]\{143\}[^/]+' |
perl -pe 's%(.*/)([^/]{143})([^/]+)$%mv "$1$2$3" "$1$2"' |
sh

如果您无法访问Perl,则可以将相同的脚本重构到sed命令中,尽管regex将略有不同,因为它们讲不同的方言。

代码语言:javascript
运行
复制
find . -type f -regex '.*/[^/]\{143\}[^/]+' |
sed 's%\(.*/\)\([^/]\{143\}\)\([^/]\+\)$%mv "\1\2\3" "\1\2"' |
sh

对于您的文件名,这有一些幼稚的假设--如果它们可以包含换行符或双引号,则需要更可靠的内容(参见https://mywiki.wooledge.org/BashFAQ/020)。粗略地说,也许可以试试

代码语言:javascript
运行
复制
find . -type f -regex '.*/[^/]\{143\}[^/]+' -exec bash -c 'for f; do
    g=${f##*/}
    mv -- "$f" "${f%/*}/${g:0:143}"
  done' _ {} +
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69444003

复制
相关文章

相似问题

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