Szenario:
Ein Ordner im Linux-System. Ich möchte jede XLS-Datei in einem Ordner durchlaufen.
Dieser Ordner besteht normalerweise aus verschiedenen Ordnern und Dateitypen (.sh, .pl, .csv, ...).
Ich möchte nur alle Dateien im Stammverzeichnis durchlaufen und ein Programm nur für XLS-Dateien ausführen.
Bearbeiten:
Das Problem ist, dass das Programm, das ich ausführen muss, 'xls2csv' ist, um vom XLS- ins CSV-Format zu konvertieren. Also muss ich für jede XLS-Datei den Dateinamen abrufen und an CSV anhängen.
Zum Beispiel habe ich eine test.xls-Datei und die Argumente für xls2csv sind: xls2csv test.xls test.csv
Habe ich Sinn gemacht?
nullglob
, um die Schleife zu überspringen.Die erste Zeile in der
do
Datei prüft, ob die "übereinstimmende" Datei wirklich vorhanden ist, denn falls in Ihrer Datei nichts übereinstimmtfor
,do
wird die mit "* .xls" als ausgeführt$i
. Das könnte für Sie schrecklich seinxls2csv
.quelle
Schauen Sie sich den Befehl find an .
Was Sie suchen, ist so etwas wie
Hat es geposted
wird ausgeführt
xls2csv file.xls file.xls.csv
Näher an dem, was Sie wollen.
quelle
find -maxdepth 1
Unterordner ausschließen. Dies wird auchtest.xls
intest.xls.csv
statt konvertierttest.csv
. Also nicht ganz das, wonach OP gefragt hat, aber ziemlich nah.{}
als Teilzeichenfolge eines Arguments anstelle eines gesamten Arguments ist eine GNU-Erweiterung, die von der POSIX-Spezifikation für nicht garantiert wirdfind
. Daher ist diese Antwort nicht unbedingt auf Nicht-GNU-Plattformen übertragbar.Bash 4 (rekursiv)
quelle
$(rm -rf /)
... oder nur Leerzeichen enthalten.