Umgang mit Dateinamenerweiterungen – bash vs. oascript

Ich habe ein Skript, das offene Fenster schließt, aber es funktioniert nur, wenn ich die Finder-Einstellung "Alle Dateinamenerweiterungen anzeigen" aktiviert habe. Gibt es eine robuste Möglichkeit, dies unabhängig vom Status der Einstellung für die Dateinamenerweiterung zu erreichen? Ich nehme an, ich könnte versuchen, die Datei sowohl mit als auch ohne die Erweiterung zu schließen, aber das ist eine hässliche Lösung

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

Antworten (1)

Da Ihre Shell-Variable $fileimmer eine Dateierweiterung intakt hat, müssen Sie die pathEigenschaft für Previewdocument verwenden , die den vollständigen Dateipfad der geöffneten Datei einschließlich der Dateierweiterung enthält :

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

Dies ist jedoch langsam, auch ohne die sleepVerzögerung. Eine andere Möglichkeit besteht darin, die Dateien stattdessen in AppleScript aufzulisten:

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

Dies geschieht fast augenblicklich, und die displayed nameEigenschaft verwendet speziell den Namen, wie er im Finder angezeigt wird , mit oder ohne Erweiterung. Daher stimmt es mit der nameEigenschaft des Vorschaudokuments überein .