카메라의 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에서 실행되고 있습니다. (
경로에서 끝 고정 위치의 두 "/"만 잘라냅니다.)
/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