Find
重命名父目錄時不重命名子目錄
我的目錄樹如下 -
/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
是從樹的頂部開始搜尋的,所以它正在失去對樹的跟踪。這裡的解決方案是什麼?
問題不是由引起的
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' {} +