Unterschied zwischen ls und finden, um eine Schleife über Dateien in ein bash-script
Ich bin mir nicht sicher, ob ich verstehe genau, warum:
for f in `find . -name "strain_flame_00*.dat"`; do
echo $f
mybase=`basename $f .dat`
echo $mybase
done
funktioniert und:
for f in `ls strain_flame_00*.dat`; do
echo $f
mybase=`basename $f .dat`
echo $mybase
done
nicht, also das mit dem Namen nicht beraubt das suffix. Ich denke, es ist, weil, was dabei heraus kommt ls
ist anders formatiert, aber ich bin mir nicht sicher. Ich selbst habe eval
vor der ls...
Wenn alle Sie haben, ist eine einfache glob dann, warum würden Sie entweder?
Sicher, aber ich würde gerne verstehen, warum das unterschiedliche Verhalten...
Nie analysieren die Ausgabe von
mywiki.wooledge.org/ParsingLs
Sie könnten auch verwenden
Sicher, aber ich würde gerne verstehen, warum das unterschiedliche Verhalten...
Nie analysieren die Ausgabe von
ls
!mywiki.wooledge.org/ParsingLs
Sie könnten auch verwenden
find . -name "strain_flame_00*.dat" -exec basename "{}" .dat \;
durchzuführen, einen Befehl auf den einzelnen abgestimmt-DateiInformationsquelleAutor FrenchKheldar | 2012-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den richtigen Weg, um die Iteration über die Dateinamen hier wäre
Mit
for
mit einem glob-Muster, und dann zitieren Sie alle Verweise auf das mit dem Namen ist der sicherste Weg für die Verwendung von Dateinamen, die möglicherweise Leerzeichen.InformationsquelleAutor glenn jackman
Erstens, nicht parse die Ausgabe der
ls
Befehl.Wenn Sie verwenden MÜSSEN
ls
und Sie NICHT wissen, wasls
alias gibt, dann dies:Es ist umgeben von Klammern, um den Schutz vorhandener Umgebung, Aliase und shell-Variablen.
Verschiedene Umwelt-Namen waren SCHOB (wie
ls
sieht diese).Einer unalias-Befehl (selbsterklärend).
Einer unset-Befehl (wieder, Schutz gegen ein rigides über-Herren 'ls' - Funktion).
Nun, Sie können sehen, warum NICHT verwenden das Programm 'ls'.
ls
Funktion hat), benutzencommand ls
InformationsquelleAutor John Greene
Ein weiterer Unterschied, der noch nicht erwähnt wurde ist, dass
find
ist rekursive Suche standardmäßig in der Erwägung, dassls
ist nicht. (obwohl beide gesagt werden kann, zu tun, rekursiv /nicht-rekursiv durch die Optionen; undfind
gesagt werden kann, um die Rekursion bis zu einer bestimmten Tiefe)Und, wie andere erwähnt haben, wenn es erreicht werden kann, indem Platzhalter, sollten Sie vermeiden, mit entweder.
InformationsquelleAutor sampson-chen