Quicky-Skript, passen Sie es an:
#!/usr/bin/env bash find /project/ -name '*.pdf' -print0 | while read -d $'\0' i; do if [ ! -e "$" ]; then echo "$ doesn't exist!" fi done exit 0
-d $'\0'
setzt das Trennzeichen für read
nullbyte, während dies -print0
das Äquivalent für ist find
, also sollte dies kugelsicher gegen Dateien sein, deren Namen Leerzeichen und Zeilenumbrüche enthalten (in diesem Fall offensichtlich irrelevant, aber im Allgemeinen nützlich). $
ersetzt das .pdf
am Ende der Variablen $i
durch -project.zip
. Abgesehen davon ist dies alles Standard-Shell-Scripting-Zeug.
Wenn Sie es noch weiter verkürzen wollten, können Sie es auch verwenden
[ -e "$" ] || echo "$ doesn't exist!"
... statt der if
Aussage. Ich denke, das if
ist einfacher zu handhaben, wenn Sie mehr als eine einzelne, kurze Leitung verwenden (Sie können dies umgehen, indem Sie eine Funktion verwenden, aber an diesem Punkt erhalten Sie keine Platzersparnis gegenüber der Verwendung der if
).
Vorausgesetzt, Sie haben bash 4+ (was Sie wahrscheinlich tun; Sie können dies überprüfen bash --version
), können Sie die globstar-Option anstelle von find
:
#!/usr/bin/env bash shopt -s globstar for f in /project/**/*.pdf; do if [ ! -e "$" ]; then echo "$ doesn't exist!" fi done exit 0
Dies hat den Vorteil, dass es ein reiner Bash ist, also sollte es schneller sein (allerdings nur bei mindestens Hunderten von Dateien).