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