Bash
嘗試在文件名中使用 -r 對文件進行 mv 時出錯
這是我的問題:
我有一個名稱中帶有 -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