sh でファイル名を繰り返し変更します。

sh でファイル名を繰り返し変更します。

私はCCTVカメラの画像を保存するためにSynologyを使用しています。 CCTVシステムのファイルをSynologyにコピーし、AVI形式に変換しました。したがって、私のファイル名は次のようになります。

10.01.07-10.01.48[M][@0][0].dav.avi

次のように上記の名前から再帰的に名前を変更したいと思います。

10.01.07-10.01.48.avi 

各ファイル名には常に同じ部分が含まれます。[M][@0][0].dav.avi

renameしかし、問題はSynologyシェルにコマンドがないことです(shいいえbash)。

find私は成功せずにさまざまな構文でコマンドを試しました。解決策を見つけるのに役立ちますか?

ベストアンサー1

次のことができます。

find . -name '*\[M]\[@0]\[0].dav.avi' -type f -exec sh -c '
  for file do
    echo mv "$file" "${file%"[M][@0][0].dav.avi"}.avi"
  done' sh {} +

echo元気になったら削除してください。)

.dav.aviまたは、すべての名前をに変更し、if.aviも削除したい場合:[M][@0][0]

find . -name '*.dav.avi' -type f -exec sh -c '
  for file do
    new=${file%.*.*}
    new=${new%"[M][@0][0]"}.avi
    echo mv "$file" "$new"
  done' sh +

これはPOSIX構文であり、busyboxユーティリティと一緒に使用することもできるため、Synologyで動作する必要があります。

いくつかの注意事項(あなたと他の答えの観察に基づいています):

おすすめ記事