Dateitypen in der Befehlszeile bevorzugen

Dateitypen in der Befehlszeile bevorzugen

Oft muss ich mehrere PDF-Dokumente mit Anmerkungen versehen xournal. Wenn ich mit einem Verzeichnis „neuer“ pdfDateien beginne, öffne ich sie einfach alle mit xournal:

for f in *pdf; do xournal $f&; done

Wenn ich anfange, eine Datei zu kommentieren, .pdfspeichere ich sie beispielsweise als .xoj, d. h. ich ändere einfach die Dateierweiterung. Nehmen wir nun an, ich habe eine unterbrochene Sitzung und möchte alle .pdfDateien im Verzeichnis öffnen, sofern keine entsprechende .xojDatei vorhanden ist, und andernfalls die Datei öffnen .xoj(beides mit xournal).

Wie kann ich dies in der Befehlszeile tun?

Antwort1

Sie können es einfach entfernen, .pdfum den Dateinamen ohne die Erweiterung zu erhalten und nach einer Datei mit diesem Namen und der .xojErweiterung zu suchen:

for f in *.pdf
do
    if [ -f "${f%.pdf}".xoj ]
    then
        xournal "${f%.pdf}".xoj &
    else
        xournal "${f}" &
    fi
done

Antwort2

for f in *.pdf; do
  fname=$(basename "$f" .pdf);
  if [[ -e "${fname}".xoj ]]; then
    # .xoj file does exist, do things here
  else
    # .xoj file doesn't exist, do other things here
  fi
done

Antwort3

Mit zshkönnten Sie dieeSchnur Glob-Qualifizierer:

for f (./*.pdf(.e_'[[ ! -f $REPLY:r.xoj ]] || REPLY=$REPLY:r.xoj'_))
xournal $f &

Der String [[ ! -f $REPLY:r.xoj ]] || REPLY=$REPLY:r.xojwird als Shell-Code ausgeführt. REPLYenthält den Wert des aktuellen Arguments. Wenn es keine entsprechende .xojDatei für die aktuelle .pdfDatei gibt, [[ ! -f $REPLY:r.xoj ]]wird zurückgegeben trueund nichts passiert ( REPLYbleibt unverändert).
Wenn es eine entsprechende .xojDatei für die aktuelle .pdfDatei gibt, [[ ! -f $REPLY:r.xoj ]]wird zurückgegeben falseund REPLY=$REPLY:r.xojausgeführt, wobei (über den :rModifikator) die .pdfErweiterung des aktuellen Arguments durch ersetzt wird .xoj.

Antwort4

Ich versuche nur, es klar und prägnant auszudrücken. Xournal wird nur an einer Stelle neu zugewiesen fund aufgerufen, auf die Erweiterungsverstümmelung wird ${f%.pdf}nur einmal zugegriffen.

for f in *.pdf
do
    xoj = "${f%.pdf}.xoj"
    [ -f "$xoj" ] && f="$xoj"
    xournal "$f" &
done

verwandte Informationen