Ich führe gerade ein Skript (check_files.sh), das match1 Dateien erzeugen kann oder nicht (zB match1.txt, match2.txt, etc.) gehen Sie auf einen R-Skript auf dem erzeugten Spiel * Dateien auszuführen.Alternative Methode in Bash, um zu überprüfen, ob die Datei vorhanden ist
Doch bevor ich den R-Skript ausführen, ich eine Linie in meinem Skript versucht habe, die überprüft, ob die Dateien vorhanden sind.
if [ -s match* ]
then
for f in match*
do
Rscript --vanilla format_matches.R ${f}
rm match*
done
else
echo "No matches present"
fi
Ich bekomme jedoch immer eine Fehlermeldung (da oft viele Match-Dateien erzeugt werden):
./check_files.sh: line 52: [: too many arguments
Gibt es eine Alternative zu [-s match *], die die Fehlermeldung nicht auslösen würde? Ich nehme an, dass die Fehlermeldung erscheint, da mehrere Match * -Dateien erzeugt werden.
Das wird nicht funktionieren, wenn die Dateinamen Zeilenumbrüche oder Backslash enthalten. Überlegen Sie, 'find ... -exec bash -c" script "' form zu verwenden, anstatt die Ausgabe von 'find' zu übergeben. – kojiro
Backslashes und Zeilenumbrüche für Dateinamen? Ernsthafte Frage, ist das jemals passiert? – xvan
Ja. Dateinamen sind Benutzereingaben für dieses Programm. Vertrauen Sie nicht Benutzereingaben. – kojiro