Linux의 plist 파일에서 값 가져오기

Linux의 plist 파일에서 값 가져오기

OS X용으로 작성되어 이제 Linux로 이식된 bash 스크립트가 있습니다. 나는 리눅스 박스에 접근할 수 없다. bash 스크립트는 OS X에서 사용 가능한 및 명령을 사용하여 defaults readplist 파일에서 값을 읽 습니다.PlistBuddy

Linux 시스템에는 이러한 명령이 없으므로 해결 방법을 찾고 있습니다. 사용자가 Linux 시스템의 특정 키에 대해 plist 파일에서 값을 얻는 데 도움이 되는 라이브러리/스크립트(Perl 권장)가 있습니까?

sed/를 사용해 보았 awk으나 출력이 신뢰할 수 없습니다. plutil.plplist 파일을 다른 형식으로 변환하는 유사한 스크립트를 발견했습니다 .

실제 Linux 시스템에 배포하기 전에 변경 사항을 테스트할 수 있도록 Mac에서 Ubuntu를 실행하는 가상 시스템을 설정했습니다.

답변1

libplist가 원하는 대로 작동하는 것 같습니다. 스크립트에서 Ubuntu 패키지 이름 "libplist-utils"를 참조할 수 있습니다.

Description-ko: Apple 속성 목록 변환기 이 패키지에는 Apple 속성 목록 파일을 바이너리에서 XML로 또는 그 반대로 변환하는 도구가 포함되어 있습니다. 이는 libimobiledevice 스택의 일부이며 iDevice(iPod, iPhone, iPad...)에 대한 액세스를 제공합니다.

홈페이지:http://www.libimobiledevice.org/

설치 명령:

apt-get install libplist-utils

사용 예:

plistutil -i Info.plist

답변2

.plist파일은 이미 XML이므로(또는 쉽게 변환할 수 있음) XML을 디코딩할 무언가가 필요합니다 .

이 목적을 위해 xml2:

$ cat com.apple.systemsound.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.sound.beep.volume</key>
    <real>1</real>
</dict>
</plist>
$ xml2 < com.apple.systemsound.plist
/plist/@version=1.0
/plist/dict/key=com.apple.sound.beep.volume
/plist/dict/real=1
$ 

나머지는 알아낼 수 있어야합니다.

또는 Perl의 경우 use XML::Simple;(참고 perldoc자료 참조) XML 데이터 구조를 해시에 넣습니다.

답변3

Python3에는 표준 라이브러리가 있습니다.

plistlib파일을 읽고 쓸 수 있으며 .plist,https://docs.python.org/3.9/library/plistlib.html

MyKey예를 들어 다음에서 값을 가져옵니다 ./Info.plist.

$ python3 -c "import plistlib; print(plistlib.load(open('./Info.plist', 'rb'))['MyKey'])" 
MyValue

이는 Python3을 실행하는 모든 운영 체제에서 작동합니다.

관련 정보