帮助将 bash 脚本从 Linux 转换为 FreeBSD 10.3-RELEASE-p19

帮助将 bash 脚本从 Linux 转换为 FreeBSD 10.3-RELEASE-p19

我将相机中的 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

我有一个在 Linux 上运行的脚本,用于重命名和移动 jpg 位置中的文件,如下所示:(
它只是从路径 - 从结束固定位置剪切了两个“/”):

/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...}:错误替换

任何人都可以帮助转换这个 linux 脚本以在安装的 BSD 服务器上运行吗?
我检查了一下,BSD 上安装了 awk 和 cut ...。
谢谢。

#!/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

相关内容