すべての.sh拡張子を削除したかったので、次のようにしました。
ls *.sh | xargs -I {} mv {} `basename {} .sh`
ただし、機能しませんが、basename
変更されていないファイル名を返すように動作します。
なぜそのように振る舞うのですか?
たとえば、これは機能します:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
編集:
解決策:単一引用符は`basename ...`
、コマンドが実行される前にシェルによる評価を防ぎます。
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-i
オプションに対応するデフォルトである場合を除き、正しくありませんが、これらの「クラシック」オプションは廃止されています。たとえば、オプション/行を1つだけ使用する場合、新しいPOSIXのマニュアルページではを推奨してい-L1
ます。の古い動作を呼び出すため-i
に、ページは-I'{}'
オプションを推奨しています。