Find

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

  • November 23, 2019

我的目錄樹如下 -

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

(感謝弗雷迪解決方案。)

引用自:https://unix.stackexchange.com/questions/553728