Bash 스크립트를 통해 모든 사용자 계정에 대해 아래 파일을 제거하려고 하는데 와일드카드 *가 작동하지 않는 것 같습니다. Mac OS X 터미널에서 스크립트를 실행하여 로컬로 테스트해 왔습니다.
삭제할 Plist 파일: com.apple.eap.bindings.XXXXXXX.plist
#!/bin/bash
for dir in /Users/*;
do
if [[ -e "${dir}/Library/Preferences/com.apple.eap.bindings.*" ]]; then
rm "${dir}/Library/Preferences/com.apple.eap.bindings.*"
fi
done
위 코드는 문제의 파일을 삭제하지 않지만 와일드카드 없이 정확한 파일 이름을 가리키면 작동합니다. 따옴표도 제거해 보았으나 여전히 파일이 삭제되지 않습니다. 누군가 도와주실 수 있나요?
답변1
if [[ -e "${dir}/Library/Preferences/com.apple.eap.bindings.*" ]]; then
이 줄에서는 큰따옴표 안에 별표를 넣습니다. 이는 마술처럼 파일 이름으로 확장되는 것이 아니라 리터럴 문자로 만듭니다.
연결:큰따옴표-vs-별표-파일 이름-확장-in-bash게다가이미 Shaun이 가리킨 게시물.
따옴표 없이 별표를 사용해야 합니다. 스크립트의 첫 번째 부분에서나 인수로find
.
답변2
이것을 대안으로 생각할 수 있습니다.
#!/bin/bash
/usr/bin/find /Users/*/Library/Preferences -name "com.apple.eap.bindings.*.plist" -exec /bin/rm -fv "{}" \;
이렇게 하면 문제의 파일이 효과적으로 제거됩니다. 출력을 원하지 않으면 'v' 스위치를 제거하십시오.
답변3
이것이 누군가에게 도움이 된다면, 이것이 나에게 효과적인 것입니다:
#!/bin/bash
for dir in /Users/*;
do
if [ -z "$(echo ${dir}/Library/Preferences/com.apple.eap.bindings.*|grep -q '*')" ]; then
rm ${dir}/Library/Preferences/com.apple.eap.bindings.*
fi
done