ディレクトリ内のすべてのファイル名を* .tsから* .mkvに変更したいと思います。

ディレクトリ内のすべてのファイル名を* .tsから* .mkvに変更したいと思います。

私のechoコマンドは、ディレクトリ内の.tsファイル内のすべてのファイルの名前を変更すると機能しますが、新しい変数にしようとすると機能しません。

#!/bin/sh
for file in "${1}"/*.ts; do
  echo ${file} | sed -e 's|.ts|.mkv|'
  new_name=${file} | sed -e 's|.ts|.mkv|'
done

答え1

最も簡単な解決策は、割り当てを次に変更するように指示することです。

new_name=$( echo ${file} | sed -e 's|.ts|.mkv|' )

しかし、より良い解決策は次のとおりです。

new_name="${file%.ts}.mkv"

答え2

find . -maxdepth 1 -type f -name '*.ts' -exec rename .ts .mkv {} "+"

ファイルを含むディレクトリで実行します.ts

答え3

renameあなたが探しているもの:

rename '.ts' '.mkv' "${1}/*.ts"

答え4

#!/bin/sh
for file in "${1}"/*.ts; do
   mv "${file}" "$(basename "${file}").mkv"
done

関連情報