
Oft muss ich mehrere PDF-Dokumente mit Anmerkungen versehen xournal
. Wenn ich mit einem Verzeichnis „neuer“ pdf
Dateien beginne, öffne ich sie einfach alle mit xournal
:
for f in *pdf; do xournal $f&; done
Wenn ich anfange, eine Datei zu kommentieren, .pdf
speichere 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 .pdf
Dateien im Verzeichnis öffnen, sofern keine entsprechende .xoj
Datei 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, .pdf
um den Dateinamen ohne die Erweiterung zu erhalten und nach einer Datei mit diesem Namen und der .xoj
Erweiterung 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 zsh
könnten Sie diee
Schnur 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.xoj
wird als Shell-Code ausgeführt. REPLY
enthält den Wert des aktuellen Arguments. Wenn es keine entsprechende .xoj
Datei für die aktuelle .pdf
Datei gibt, [[ ! -f $REPLY:r.xoj ]]
wird zurückgegeben true
und nichts passiert ( REPLY
bleibt unverändert).
Wenn es eine entsprechende .xoj
Datei für die aktuelle .pdf
Datei gibt, [[ ! -f $REPLY:r.xoj ]]
wird zurückgegeben false
und REPLY=$REPLY:r.xoj
ausgeführt, wobei (über den :r
Modifikator) die .pdf
Erweiterung 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 f
und 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