LinuxでFreeBSD 10.3-RELEASE-p19にbashスクリプトを変換するのに役立ちます

LinuxでFreeBSD 10.3-RELEASE-p19にbashスクリプトを変換するのに役立ちます

カメラのJPEGファイルをFTPサーバーに次の形式で保存します。

/cctv/IPC06/2022-02-11/001/jpg/12/26/01[M][0@0][0].jpg
/cctv/IPC06/2022-02-11/001/jpg/12/24/20[M][0@0][0].jpg
/cctv/IPC06/2022-02-11/001/jpg/12/24/42[M][0@0][0].jpg
/cctv/IPC06/2022-02-11/001/jpg/14/15/32[M][0@0][0].jpg
/cctv/IPC06/2022-02-11/001/jpg/14/15/52[M][0@0][0].jpg

次のように、jpgの場所にあるファイルの名前を変更して移動するスクリプトがLinuxで実行されています。 (
パスの端の固定位置の2つの「/」のみを切り取ります。)

/cctv/IPC06/2022-02-11/001/jpg/122601[M][0@0][0].jpg
/cctv/IPC06/2022-02-11/001/jpg/122420[M][0@0][0].jpg
/cctv/IPC06/2022-02-11/001/jpg/122442[M][0@0][0].jpg
/cctv/IPC06/2022-02-11/001/jpg/141532[M][0@0][0].jpg
/cctv/IPC06/2022-02-11/001/jpg/141552[M][0@0][0].jpg

jpg場所でFTPに接続されている端末でこれを実行しているのはうまくいきますが、リモート場所でこれを行うために時間がかかります。

find . -mindepth 2 -type f -iname '*.jpg' -exec bash -c 'path1="${0:0:-23}" name1="${0: -23:2}" name2="${0: -20:2}" name3="${0: -17}"; echo mv "$0" "${path1}${name1}${name2}${name3}"' {} \;

このスクリプトをFTPサーバーにインストールしたいFreeBSD 10.3-リリース-p19しかし、なぜならBASHがインストールされていないため、インストールできません。次のように失敗します。${1:0...}: エラーの置き換え

インストールされたBSDサーバーで実行するようにこのLinuxスクリプトを変換するのに役立つ人はいますか?
確認してみると、awkとcutがBSDにインストールされています。
ありがとうございます。

#!/bin/sh

# BSD scripts for camera.

# OK this delete old recordings in BSD
#find /cctv/IPC06/* -maxdepth 0 -type d -mtime +32 | xargs rm -rf

# find jpg rename and move it... from linux...not working in BSD yet.
# ERROR
# ${1:0...}: Bad substitution
# ${1:0...}: Bad substitution

find /cctv/IPC06/* -type f -iname '*.jpg' -exec /bin/sh -c 'path1="${1: 0:-23}"; name1="${1: -23:2}"; name2="${1: -20:2}"; name3="${1: -17}"; echo mv "$1" "${path1}${name1}${name2}${name3}" ' sh_cp {} \;


# work in progress BSD
# ERROR
# ${1:0...}: Bad substitution

find /cctv/IPC06/* -type f -iname '*.jpg' -exec /bin/sh -c 'p="${1:0:-23}" echo mv "$1" "${p}"' sh_cp {} \;


# test
# this run without error in BSD
find /cctv/IPC06/* -type f -iname '*.jpg' -exec /bin/sh -c 'echo mv "$1" ' sh_cp {} \;

ベストアンサー1

私はそれを解決しました:

#!/bin/sh
# find jpg rename and move it
for i in $(find /cctv/IPC06 -mindepth 6 -name '*.jpg'); do j=$(echo $i | cut -c 1-58,60-61,63- ); mv $i $j; done

おすすめ記事