md5sum이 공백으로 파일 이름을 엉망으로 만들고 있습니다.

md5sum이 공백으로 파일 이름을 엉망으로 만들고 있습니다.

user.comment 확장 속성이 없는 각 파일에 대해 md5를 생성한 다음 파일의 확장 속성에서 해당 md5를 구문 분석하려고 합니다. 내 스크립트는 잘 작동하지만 파일 이름에 공백이 없는 경우에만 작동합니다.

cd /tank/test
shopt -s nullglob
for f in *.txt
do
  if [[ -n $(getfattr -n user.comment "$f") ]]; then
    continue
  else
    md5=($(md5sum $f))
    setfattr -n user.comment -v "$md5" "$f"
  fi
done

대신 명령 을 사용하는 사람들을 많이 보았지만 find내 경우에 어떻게 작동하게 만드는지 모르겠습니다.

답변1

당신의 주요 문제는,@wigy가 지적한대로, 변수를 인용하지 않은 것입니다. 즉, 공백이 포함된 파일 이름은 별도의 파일로 처리됩니다. 일반적인 경험 법칙은 다음과 같습니다.언제나그렇게 하지 않을 타당한 이유가 없는 한 변수를 인용하십시오.

즉, 다음은 스크립트의 단순화된 버전입니다.

#!/usr/bin/env bash

shopt -s nullglob
for f in /tank/test/*txt
do
    [[ -n $(getfattr -n user.comment "$f" 2>/dev/null) ]] ||
        setfattr -n user.comment -v "$(md5sum "$f")" "$f"
done

쉘 글로브를 사용하는 것은 일반적으로 더 간단하고 깔끔하지만 다음을 사용하여 수행하는 방법은 다음과 같습니다 find.

find /tank/test/ -type f -name '*.txt' -print0 |
 while IFS= read -r -d '' f
 do
     [[ -n $(getfattr -n user.comment "$f" 2>/dev/null) ]] ||
         setfattr -n user.comment -v "$(md5sum "$f")" "$f"
 done

관련 정보