這是我的問題:
我有一個名稱中帶有 -r 的檔案:-r.jpg
當我嘗試做時,mv *.jpg old/
我得到:
mv: invalid option -- 'r'
即使是
for g in *.jpg;do echo $g &&mv "${g}" old/;done
我有同樣的錯誤。
答案1
大多數命令列實用程式都提供了分離選項從論點。
這可以防止許多問題“特別的”看起來像選項的檔案名稱。
最常見的分隔符號指示選項的結尾是兩個連字符--
或--也支援mv
。
換句話說:
mv [OPTIONS] -- SOURCE DEST
或因為您沒有指定任何選項:
mv -- *.jpg old/
答案2
最簡單的解決方案是在檔案名稱前面添加./
描述相對路徑
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