/usr/share/applications/*.desktop에서 "이름", "Exec" 및 "아이콘" 필드 목록을 반환하려고 합니다.
난 달린다:
grep Icon= /usr/share/applications/*.desktop | cut -d '=' -f 2
좋음: 목록이 주어졌습니다.
오류: Icon= 필드가 없는 모든 .desktop 파일을 건너뛰는 중입니다.
문제: "Icon=" 필드가 없는 모든 파일을 건너뛰는 대신 0을 반환하고 싶습니다. 어떻게 해야 하나요?
grep Exec= /usr/share/applications/*.desktop | cut -d '=' -f 2
좋음: 목록이 주어졌습니다.
나쁜 점: i) 위에서 언급한 대로 Icon= 필드가 없는 모든 .desktop 파일을 건너뜁니다. ii) 이러한 필드에는 공백 뒤에 원하지 않는 문자(예: %u)가 포함되는 경우가 많습니다.
질문: i) 위와 동일합니다. ii) 공백 뒤의 문자를 반환하지 않도록 명령에 ' ' 구분 기호도 포함하려면 어떻게 해야 합니까?
grep Name= /usr/share/applications/*.desktop | cut -d '=' -f 2
좋음: 목록이 주어졌습니다.
오류: Name=의 텍스트뿐만 아니라 GenericName= 또는 anyotherName=의 텍스트도 반환됩니다.
질문: "Name="만 반환되고 다른 필드는 반환되지 않도록 명령을 작성하려면 어떻게 해야 합니까?
편집: Mint Cinnamon 20.3을 사용하여 단일 명령/스크립트로 1,2,3을 동시에 수행하는 것이 가능합니까, 아니면 다른 질문의 기준에도 맞는 한 질문에 대한 해결책이 있습니까? 그냥 "아이콘"을 바꾸세요. "실행"과 "이름"만 바꾸시면 됩니다.
답변1
GNU awk에서는 다음과 같은 작업을 수행할 수 있습니다.
gawk -F'[[:blank:]]*=[[:blank:]]*' -v key=Exec '
BEGINFILE {value = "0"}
$1 == key {value = $2; nextfile}
ENDFILE {split(value,v,/[[:blank:]]+/); print v[1]}
' /usr/share/applications/*.desktop
다른 상황에 따라 키를 변경하세요.