我的目录树如下所示 -
/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' {} +