How do I dump information from a Windows *.lnk shortcut on Linux?
You can use the lnkinfo
tool from liblnk (liblnk-utils
package in Debian):
lnkinfo <file.lnk>
Example usage in scripts:
LOCAL_PATH=$(lnkinfo "$1" | grep 'Local path' | cut -d':' -f2-)
ARGS=$(lnkinfo "$1" | grep 'Command line arguments' | cut -d':' -f2-)
Example output:
$ lnkinfo 'Program Files - Shortcut.lnk'
lnkinfo 20171101
Windows Shortcut information:
Contains a link target identifier
Contains a relative path string
Link information:
Creation time : Jul 14, 2009 03:20:08.555426400 UTC
Modification time : Apr 23, 2019 21:36:46.017274100 UTC
Access time : Apr 23, 2019 21:36:46.017274100 UTC
File size : 12288 bytes
Icon index : 0
Show Window value : 0x00003000
Hot Key value : 12288
File attribute flags : 0x00000011
Is read-only (FILE_ATTRIBUTE_READ_ONLY)
Is directory (FILE_ATTRIBUTE_DIRECTORY)
Drive type : Fixed (3)
Drive serial number : 0x0e1909c6
Volume label : Local Disk
Local path : C:\Program Files
Relative path : ..\..\..\Program Files
Link target identifier:
Shell item list
Number of items : 3
Shell item: 1
Item type : Root folder
Class type indicator : 0x1f (Root folder)
Shell folder identifier : 20d04fe0-3aea-1069-a2d8-08002b30309d
Shell folder name : My Computer
Shell item: 2
Item type : Volume
Class type indicator : 0x2f (Volume)
Volume name : C:\
Shell item: 3
Item type : File entry
Class type indicator : 0x31 (File entry: Directory)
Name : PROGRA~1
Modification time : Apr 23, 2019 21:36:48
File attribute flags : 0x00000011
Is read-only (FILE_ATTRIBUTE_READ_ONLY)
Is directory (FILE_ATTRIBUTE_DIRECTORY)
Extension block: 1
Signature : 0xbeef0004 (File entry extension)
Long name : Program Files
Localized name : @shell32.dll,-21781
Creation time : Jul 14, 2009 03:20:10
Access time : Apr 23, 2019 21:36:48
NTFS file reference : MFT entry: 878, sequence: 1
Distributed link tracking data:
Machine identifier : <snip>
Droid volume identifier : b2638d5e-f5b8-480c-bda0-fdb25ab91131
Droid file identifier : 968b84a2-a646-11e9-a124-0021cc6948e3
Birth droid volume identifier : b2638d5e-f5b8-480c-bda0-fdb25ab91131
Birth droid file identifier : 968b84a2-a646-11e9-a124-0021cc6948e3
It seems there aren't a lot of programs to do this...I found two Perl scripts that kinda work.
lslnk.pl and lnk-parse
Use them like this: <whicheverscript> Name.lnk