Tratar con extensiones de nombre de archivo - bash vs oascript

Tengo un script que cierra las ventanas abiertas, pero solo funciona cuando he habilitado la preferencia "mostrar todas las extensiones de nombre de archivo" del Finder. ¿Existe una manera robusta de lograr esto independientemente del estado de la preferencia de extensión de nombre de archivo? Supongo que podría intentar cerrar el archivo con y sin la extensión, pero esa es una solución fea.

cd somedir
for file in * ; do
  echo file name is $file

osascript<<EOF
  tell application "Preview"
  close (every window whose name is "$file")
  end tell
EOF
  sleep 1
done

Respuestas (1)

Como su variable de shell $filesiempre tendrá una extensión de archivo intacta, debe usar la pathpropiedad para Preview 's document, que contiene la ruta completa del archivo abierto, incluida la extensión del archivo:

cd somedir
for file in * ; do
  echo file name is $file

osascript<<EOF
  tell application "Preview"
    close (every document whose path ends with "$file")
  end tell
EOF
  sleep 1
done

Esto es lento, sin embargo, incluso sin la sleepdemora. Otra forma de hacerlo es enumerar los archivos en AppleScript:

osascript<<EOF
  use sys : application "System Events"
  use Preview : application "Preview"

  script
    property list : displayed name of every file ¬
                    in sys's folder "$somedir"
  end script

  repeat with f in result's list
    tell Preview's document named f to if exists ¬
    then close
  end repeat
EOF

Esto es casi instantáneo y la displayed namepropiedad usa específicamente el nombre tal como se muestra en Finder , con o sin su extensión. Por lo tanto, coincide con la namepropiedad del documento de vista previa .