重命名父目录时不重命名子目录

重命名父目录时不重命名子目录

我的目录树如下所示 -

/media/blueray/Data/Test$ tree
.
├── What????
│   └── What????
└── What????.txt

当我运行命令时find . -depth | rename 's/[?<>\\:*|\"]//g'

它说 -

Can't rename ./What????/What???? ./What/What: No such file or directory

然而,运行命令后,目录结构变成了——

/media/blueray/Data/Test$ tree
.
├── What
│   └── What????
└── What.txt

在我看来,它find是从树的顶部开始搜索的,所以它失去了对树的追踪。

这里的解决方案是什么?

答案1

问题不是由 引起的find,而是由 引起的rename:它正在处理完整路径,因此它尝试重命名./What????/What????为,但由于该目录(尚)不存在而./What/What失败。What

rename仅使用 , 处理文件名将解决-d此问题:

find . -depth | rename -d 's/[?<>\\:*|\"]//g'

如果您的 版本rename不支持该-d选项(在 1.10 版本中引入File::Rename,假设您rename是 Perl 版本),您只能通过在每个目录中find运行来传递文件名:rename

find . -depth -execdir rename 's/[?<>\\:*|\"]//g' {} +

(谢谢弗雷迪为了解决方案.)

相关内容