中かっこ拡張を使用して、異なる名前のファイルを同じディレクトリにコピーしようとしています。私はbash 4.4.18を使用しています。
これが私がしたことです:
cp ~/some/dir/{my-file-to-rename.bin, new-name-of-file.bin}
ただし、次のエラーが発生します。
cp: cannot stat '/home/xyz/some/dir/{my-file-to-rename.bin,': No such file or directory
このような単純な中括弧拡張にも同じエラーが発生します。
cp {my-file-to-rename.bin, new-name-of-file.bin}
私は何が間違っていましたか?
ベストアンサー1
これ支柱の拡張構文にはカンマは使用できますが、コンマの後のスペースは使用できません。多くのプログラミング言語では、カンマの後のスペースは一般的ですが、ここではそうではありません。 Bashでは、引用符で囲まれていない空白がある場合、中括弧の拡張は行われません。
スペースを削除してください。
cp ~/some/dir/{my-file-to-rename.bin,new-name-of-file.bin}
完全に不要ですが、末尾を中.bin
かっこの外に移動できます。
cp ~/some/dir/{my-file-to-rename,new-name-of-file}.bin
支柱の拡張効果をテストするには、echo
またはprintf '%s '
、またはを使用できます。printf
これを行うには、目的の書式文字列を使用してください。 (個人的にecho
Bashにいるときにこれを使用する理由は次のとおりです。バッシュecho
内蔵エスケープシーケンスはデフォルトでは拡張されていないため、実行された実際のコマンドを調べるのに理想的です。 )例えば:
ek@Io:~$ echo cp ~/some/dir/{my-file-to-rename,new-name-of-file}.bin
cp /home/ek/some/dir/my-file-to-rename.bin /home/ek/some/dir/new-name-of-file.bin