私の問題は次のとおりです:
名前に -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