重命名父目錄時不重新命名子目錄

重命名父目錄時不重新命名子目錄

我的目錄樹如下圖 -

/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' {} +

(謝謝弗雷迪為了解決方案.)

相關內容