Bash

嘗試在文件名中使用 -r 對文件進行 mv 時出錯

  • April 21, 2022

這是我的問題:

我有一個名稱中帶有 -r 的文件:-r.jpg

當我嘗試做時,mv *.jpg old/我得到:

mv: invalid option -- 'r'

就算

for g in *.jpg;do echo $g &&mv "${g}" old/;done

我有同樣的錯誤。

大多數命令行實用程序都提供了將選項參數分開的規定。

這可以防止看起來像選項的*“特殊”*文件名出現許多問題。

選項末尾最常見的分隔符指示是兩個連字元--或.-``-``mv

換句話說:

mv [OPTIONS] -- SOURCE DEST

或者因為您沒有指定任何選項:

mv -- *.jpg old/

最簡單的解決方案是在文件名前面加上./描述相對路徑

for g in *.jpg; do echo $g && mv "./${g}" old/; done

也可以使用絕對路徑

for g in $(pwd)/*.jpg; do echo $g && mv $g old/; done

或者,您可能希望使用該find命令,因為它已經提供了相對路徑(--max-depth如果您只想處理目前目錄,則可以使用)

for g in $(find . -name "*jpg"); do mv $g old; done

在最壞的情況下,您有許多複雜的不可解析字元,您可以參考索引節點編號並相應地find -inum處理您的文件

$ for g in $(ls -i1 ./*jpg | cut -f1 -d' '); do find . -inum $g -print0 | xargs -0 -I '{}' mv '{}' old; done

引用自:https://serverfault.com/questions/1098500