Verwenden Sie das '*' im Shell-Skript
Ich versuche ein Befehlsbeispiel auszuführen:
sudo mv /home/vaishnavi/Downloads/*.ttc /home/vaishnavi/Downloads/*.ttf /usr/local/share/fonts/ms_fonts/
Es funktioniert gut im Terminal, aber wenn ich versuche, dies in ein Shell-Skript ( .sh) einzufügen, erhalte ich die Fehlermeldung:
mv: cannot stat '/home/vaishnavi/Downloads/*.ttf': No such file or directory
In diesem Fall möchte ich einfach alle Dateien verschieben .ttfund .ttceingeben /usr/local/share/fonts/ms_fonts/. Ehrlich gesagt bin ich nicht so Experte für Shell-Skripte. Bitte erklären Sie mir, was ich falsch gemacht habe und auch eine Alternative, um meine erwarteten Ergebnisse zu erzielen.
Mein Beispielskript:
sudo mv /home/vaishnavi/Downloads/*.ttc /home/vaishnavi/Downloads/*.ttf /usr/local/share/fonts/ms_fonts/
...
exit 0
Antworten
Sie erhalten diesen Fehler, wenn dort keine * .ttf-Dateien vorhanden sind. Wenn keine Dateien mit einem Glob-Muster übereinstimmen, bleibt das Muster selbst standardmäßig im Befehl. Schalten Sie dies mit der Bash- nullglobShell-Option aus
Um ein bisschen sicherer zu sein, stellen Sie sicher, dass tatsächlich einige Dateien verschoben werden müssen:
#!/usr/bin/env bash
...
shopt -s nullglob
# store files in an array
files=( /home/vaishnavi/Downloads/*.{ttc,ttf} )
# and if the array is not empty, move the files.
if (( ${#files[@]} > 0 )); then sudo mv -t /usr/local/share/fonts/ms_fonts/ "${files[@]}"
fi