
我的目錄樹如下圖 -
/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' {} +