배쉬 이미지 처리

배쉬 이미지 처리

모두,

좋아요! 이미지 파일을 중앙 이미지 폴더로 이동해 보세요. 이것은 내 스크립트입니다.

img_dir='/home/filies/images/'
img_fil='/home/files/img_dump.txt'
i='0'
while read -r fline
do
   fpath=$(dirname "$fline")"/"
   fname=$(basename "$fline")".$i"         
   nfile="$img_dir$fname"
   if [ ! -e "$nfile" ]; then
#      mv "$fline $img_dir$nfile"
      echo "NF=> $nfile"
   else
      ((i++))
#      mv "$fline $img_dir$nfile.$i"
      echo "F=> $fname P=> $fpath"
   fi 
done < ${img_fil}
exit

올바른 결과를 얻거나 적어도 만족스러운 결과를 얻을 때까지 파일 이동은 현재 주석 처리되어 있습니다.

중복이 있습니다. 현재 스크립트는 동일한 파일 이름의 중복에 대해서만 카운터를 증가시키지 않고 중복이 발생할 때마다 카운터를 증가시킵니다.

이를 수행하는 더 좋은 방법이 있습니까? 아니면 새 이미지 디렉터리에서 최신 증분 번호를 검색하는 서브루틴을 만들 수 있습니까?

건배

광학MR

답변1

스크립트에서 루프를 사용할 수 있습니다.

nfile="$img_dir$fname"
while [ -e "$nfile" ]
do
  ((i++))
  fname=$(basename "$fline")".$i" 
  nfile="$img_dir$fname"
done

이제 사용하지 않은 파일 이름이 생겼습니다.

답변2

와일드카드를 사용하여 배열에 로드하고 배열 크기를 사용할 수 있습니다.

shopt -s nullglob
dups=("$nfile".*)
shopt -u nullglob
i=${#dups[@]}
((i++))

번호는 1부터 시작하므로 파일 개수가 0이더라도 1이 되도록 한 번 늘려야 합니다. nullglob이를 설정해야 합니다. 그렇지 않으면 아래 설명과 같이 배열 크기가 1이 됩니다.파일 이름 glob에서 비어 있을 수 있는 배열을 만드는 방법은 무엇입니까?. shopt -u nullglob그 반대가 사실입니다. 설정이 해제됩니다 nullglob.

패턴과 일치하는 다른 파일 이름에 문제가 있습니다 "$nfile".*. *숫자뿐만 아니라 무엇이든 일치하므로 주의하세요.

전체 내용은 다음과 같습니다.

img_dir='/home/filies/images/'
img_fil='/home/files/img_dump.txt'
#i='0'
while read -r fline
do
   fpath=$(dirname "$fline")"/"
   fname=$(basename "$fline")".$i"         
   nfile="$img_dir$fname"
   if [ ! -e "$nfile" ]; then
      mv "$fline $img_dir$nfile"
      echo "NF=> $nfile"
   else
      shopt -s nullglob
      dups=("$nfile".*)
      shopt -u nullglob
      i="${#dups[@]}"
      ((i++))
      mv "$fline $img_dir$nfile.$i"
      echo "F=> $fname.$i P=> $fpath"
   fi 
done < "${img_fil}"
exit 

이 줄을 주목하세요

i='0'

주석 처리되었습니다. 첫째, 이 경우에는 필요하지 않기 때문입니다. 둘째, 이 문제를 해결하기 위해 다른 방법을 사용할 경우, 재설정하지 않으면 i각 루프 이후에 값이 계속 증가하므로 주의하시기 바랍니다.while

이 줄에 추가 했으므로 .$i원하는 내용이 아닌 경우 제거하세요.

echo "F=> $fname.$i P=> $fpath" 

관련 정보