공백이있는 파일 이름을 엉망으로 만드는 md5sum


0

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대신 많은 사람들이 명령을 사용하는 것을 보았지만 내 경우에 어떻게 작동시키는 지 모르겠습니다.


2
$ f 주위에 ""를 추가하는 것이 도움이됩니까? 와 같이md5sum "$f"
wigy

거룩한! 당신은 남자 lol 내가 그것을 그리워 믿을 수 없어요, 고마워요 :)
Weekender

;) 스크립팅을 유지하십시오!
wigy

답변:


0

@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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.