ファイル名に -r を指定してファイルを mv しようとするとエラーが発生する

ファイル名に -r を指定してファイルを mv しようとするとエラーが発生する

私の問題は次のとおりです:

名前に -r が含まれるファイルがあります:-r.jpg

を実行しようとすると、mv *.jpg old/次のようになります:

mv: invalid option -- 'r'

たとえ

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

私も同じエラーが出ます。

答え1

ほとんどのコマンドラインユーティリティには、オプションから議論

これにより、さまざまな問題を防ぐことができます"特別"オプションのように見えるファイル名。

オプションの末尾を示す最も一般的な区切り文字は 2 つのハイフン--またはで、--これもサポートされています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

最悪の場合、解析不可能な複雑な文字が多数ある場合は、inode番号と組み合わせたものを参照してfind -inum、それに応じてファイルを処理することができます。

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

関連情報