この名前変更操作が機能しないのはなぜですか? [コピー]

この名前変更操作が機能しないのはなぜですか? [コピー]

これは働きます:

$ touch abcdefg
$ mv -v abcdefg abc[de]fg
‘abcdefg’ -> ‘abc[de]fg’

しかし、これはうまくいきません。

$ touch abcdefg
$ mv -v abcdefg abc[d]efg
mv: ‘abcdefg’ and ‘abcdefg’ are the same file

なぜ?

答え1

シェルはファイル名に基づいてパターンを拡張します。

  • 最初の形式は(no e)および/または(no d)に拡張され、両方のファイルが存在しないため、パターンは拡張されていません。コマンドは効果的に考えられます。abcdfgabcefg

    mv -v "abcdefg" "abc[de]fg"
    
  • 2番目の形式はに拡張され、abcdefgファイルが存在するため、パターンはファイル名に拡張されるため、実際にはコマンドは次のようになります。

    mv -v abcdefg abcdefg
    

スキーマが維持または拡張される時期を確認するには、これを試してください。

touch abcdefg
ls -l abc[de]fg ; echo abc[de]fg
ls -l abc??fg ;   echo abc??fg
ls -l abc?fg ;    echo abc?fg
ls -l abc[d]efg ; echo abc[d]efg

関連情報