我在我管理的 QNAP Linux NAS 系統的用戶中發現了一個壞習慣檔案命名習慣。我們有一個 Mac OS 網路,一些檔案夾和檔案使用“/”字符命名,我知道這會導致 Linux 檔案系統出現問題。事實上,在 Mac OS 方面,包含“/”的檔案會簡單地消失,因為 QTS 會自動將所有帶有“/”的實體替換為“:”。
我想搜索并將檔案名從“:”重命名為“_”。
在網上討論時,我發現我可以使用終端從我的 Mac SSH 連接到 Linux NAS,并執行如下腳本:
for f in $(find /share/Public/demofind -name "*:*"); do mv $f ${f/:/_}; done
假設檔案在 /demofind 檔案夾中。
我啟動了腳本,但收到此錯誤:
[/share/Public] # for f in $(find /share/Public/demofind/ -name "*:*"); do mv $f ${f/:/_}; done
mv: unable to rename `/share/Public/demofind/Redazionali': No such file or directory
mv: unable to rename `01:03:19.pdf': No such file or directory
mv: unable to rename `/share/Public/demofind/Redazionali': No such file or directory
mv: unable to rename `06:09:19.pdf': No such file or directory
[/share/Public] # for f in $(find /share/Public/demofind/ -name "*:*"); do mv $f ${f/:/_}; done
mv: unable to rename `/share/Public/demofind/Redazionali': No such file or directory
mv: unable to rename `01:03:19.pdf': No such file or directory
mv: unable to rename `/share/Public/demofind/Redazionali': No such file or directory
mv: unable to rename `06:09:19.pdf': No such file or directory
順便說一句,要重命名的檔案的語法如下:“Redazionali 06:09:19.pdf”
有什么幫助嗎?謝謝 !
uj5u.com熱心網友回復:
直接的問題是您的參考中斷了,但您的代碼也有其他問題。
穩健的解決方案是
find /share/Public/demofind -name "*:*" -exec bash -c '
for f; do mv "$f"; "${f//:/_}"; done' _ {}
將for回圈放入內部find -exec可以解決檔案名中包含不尋常字符的煩人問題,而??不僅僅是空格(盡管您的for回圈也會固有地僅在單個空格上中斷;如果您必須單獨告訴外殼程式不要執行空格標記化在命令替換中使用了輸出find,但同樣,正確的解決方法是根本不這樣做)。
詳情請查看https://mywiki.wooledge.org/BashFAQ/020
uj5u.com熱心網友回復:
感謝您輸入三人組。
我嘗試了你的建議,但我一進入 find /share/Public/demofind -name "*:*" -exec bash -c 'for f; do mv "$f"; "${f//:/_}"; done' _ {}
我得到這個輸出:
BusyBox v1.01 (2021.12.12-04:24 0000) 多呼叫二進制 用法:find [PATH...] [EXPRESSION] 在目錄層次結構中搜索檔案。默認PATH是當前目錄;默認運算式是'-print'
uj5u.com熱心網友回復:
Tripleee,我也試過了 for f in "$(find /share/Public/demofind -name "*:*")"; do mv "$f" "${f/:/_}"; done
在這種情況下,我得到了:
mv:無法重命名`':沒有這樣的檔案或目錄
我想我在某個地方遇到了語法錯誤......對不起,但我剛剛開始學習如何使用 Bash 撰寫腳本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/413736.html
標籤:
