파일 처리를 위한 Bash

파일 처리를 위한 Bash

모든 이미지를 중앙 파일로 이동하는 bash 스크립트를 작성 중입니다.

다음 명령을 사용하여 이미지 파일 목록을 만듭니다.

img_fil='/home/files/img_dump.txt'
locate -i image | grep \.jpg > "$img_fil"
locate -i image | grep \.jpeg >> "$img_fil"
locate -i image | grep \.gif >> "$img_fil"
locate -i image | grep \.tif >> "$img_fil"
locate -i image | grep \.png >> "$img_fil"

그러나 이에 대한 덤프 파일 처리를 시작하면 대부분의 경로에 공백이 포함되어 있으므로 작동하지 않습니다.

while read -r fline
do
   if [ ! -e "$fline" ]; then
      echo "F=> $fline"
      mv "$fline" "$img_dir"
   else
      fpath="$(dirname $fline)"
      fname="$(basename $fline)"
      echo "F=> $fname P=> $fpath"
   fi 
done

디렉터리 이름과 기본 이름은 항상 공백으로 확인되므로 올바르게 처리되지 않습니다.

어떻게 작동하게 합니까?

답변1

fpath="$(dirname $fline)"
fname="$(basename $fline)"

$fline여기서는 명령 대체를 인용 해야 합니다 . (외부는 과제 내부에 있으므로 중요하지 않습니다.) 그래서:

fpath=$(dirname -- "$fline")

또는

fpath=${fline%/*}

dirnamebasename( /와 매개변수 확장 사이의 미묘한 차이점에 유의하시기 바랍니다 . 다음을 참조하세요.디렉토리 이름, 기본 이름 및 매개변수 확장)

답변2

$img_fil스크립트의 어디에서 사용합니까? 라인이 아니어야 done합니까 done < "$img_fil"?

관련 정보