Find
zsh find -execdir rename ‘沒有這樣的文件或目錄’
我正在嘗試在 MacOS Big Sur 上編寫一個 zsh 腳本,它將遞歸地重命名一些具有我不想要的特殊字元的文件和目錄。玩了好幾天,每次我認為我已經破解了,我都會遇到一個新問題。它基本上完成了,除了當我在空執行模式下執行 find 命令時:
find . -d -type f -execdir rename -n -X ${=CHARACTER_SUBSTITUTIONS} {} +
我在我的測試文件夾中獲得了正確的文件列表:
‘無標題文件3
$$ $$.txt’ 將被重命名為 ‘untitled file3 –.txt’
‘untitled file2.$$ $$.txt’ 將被重命名為 ‘untitled file2. - 。文本’
但是當我執行它時,它再也找不到它們了:
find . -d -type f -execdir rename -X ${=CHARACTER_SUBSTITUTIONS} {} +
結果:
無法重命名“無標題文件 3”
$$ $$.txt’ to ‘untitled file3 –.txt’: No such file or directory
Can’t rename’untitled file2.$$ $$.txt’到’無標題文件2。–.txt’:沒有這樣的文件或目錄
把我的頭撞在牆上。任何幫助將不勝感激。
如果它是相關的,CHARACTER_SUBSTITUTIONS 只是我想要製作的一長串潛艇。
echo ${=CHARACTER_SUBSTITUTIONS} -S [ - -S ] - -S + - -S # - -S % - -S { - -S } - -S \ - -S < - -S > - -S * - -S ? - -S $ - -S ! - -S : - -S @ - -S ` - -S | - -S ' - -S " - -S & - -S - -S = -
詳細資訊:
zsh
MacOS Big Sur
rename v1.601(基於 Perl 的變體之一)
由於您使用的是 Zsh,因此我將只使用
zmv
它而不是find
:% autoload -Uz zmv % zmv -n '(**/)(*)(#q.)' '$1${2//[^. [:IDENT:]]/-}' # -n: no execute mv -- 'untitled file2 [].txt' 'untitled file2 --.txt' mv -- 'untitled file3 [].txt' 'untitled file3 --.txt' % zmv -v '(**/)(*)(#q.)' '$1${2//[^. [:IDENT:]]/-}' # -v: verbose mv -- 'untitled file2 [].txt' 'untitled file2 --.txt' mv -- 'untitled file3 [].txt' 'untitled file3 --.txt' %
[^. [:IDENT:]]
匹配任何不是點、空格或 shell 標識符的有效部分的內容。(#q.)
是將重命名限制為正常文件,例如您的-type f
.欲了解更多資訊: