Seltsames Verhalten bei der Suche, wenn das folgende Muster -name nicht in Anführungszeichen steht

Seltsames Verhalten bei der Suche, wenn das folgende Muster -name nicht in Anführungszeichen steht

Es ist so seltsam, dass das folgende Muster von -name in find manchmal unerwartet alle entsprechenden Dateinamen erfolgreich durchsuchen konnte. Laut Recht konnte es nur einen entsprechenden Dateinamen im aktuellen Verzeichnis über die Shell-Analyse suchen (nicht über das Dienstprogramm find, das ohne Anführungszeichen auskommt).

find /tmp -type f -name *.txt

/tmp/amp_iostat.txt
/tmp/awrrpt_1_7950_7973.txt
/tmp/oplanlog/osys/2014-07-01-12-26-28/log.txt
/tmp/oplanlog/osys/2014-07-01-13-15-33/log.txt
/tmp/oplanlog/osys/2014-07-01-13-17-58/log.txt
/tmp/oplanlog/osys/2014-07-01-13-30-27/log.txt
/tmp/oplanlog/osys/2016-10-27-19-38-50/log.txt
/tmp/pms2_20170427.txt
/tmp/pmsdb1_20170622.txt
/tmp/pmssh1_20160728.txt
/tmp/pmssh1_20160831.txt
/tmp/pmssh1_20161227.txt
/tmp/pmssh1_20170328.txt
/tmp/pmssh1_20170523.txt
/tmp/pmssh1_20170727.txt
/tmp/pmssh1_20170822.txt
/tmp/pmssh2_20170328.txt
/tmp/pmssh_20170119.txt
/tmp/pmssh_20170220.txt
/tmp/sgpms_20140717_1736_summary.txt
/tmp/sgpms_20140717_1736_trace.txt
/tmp/sgpms_20140717_1737_summary.txt
/tmp/sgpms_20140717_1737_trace.txt
/tmp/sgpms_20140717_1739_summary.txt
/tmp/sgpms_20140717_1739_trace.txt
/tmp/sgpms_20140717_1743_summary.txt
/tmp/sgpms_20140717_1743_trace.txt
/tmp/sgpms_20140717_1749_summary.txt
/tmp/sgpms_20140717_1749_trace.txt
/tmp/sgpms_20140717_1751_summary.txt
/tmp/sgpms_20140717_1751_trace.txt

find /tmp -type f -name *.txt|wc -l
      31

Antwort1

Ohne Zitat *.txtgiltPfadnamenerweiterung (auch Dateinamenerweiterung genannt)Dies geschieht in deraktuelles Arbeitsverzeichnis(CWD). Wenn das CWD Dateien mit der Erweiterung „txt“ enthält, findersetzt die Shell vor dem Aufruf den *.txtParameter durch die passenden Dateinamen und Ihr Befehl sieht dann etwa so aus:

find /tmp -type f -name file1.txt file2.txt file3.txt ...

Je nachdem, ob die Erweiterung zurückkehrt, können Sie mindestens drei Ergebnisse erhalten …

  • ...mehrere Dateien:Sie erhalten eine Fehlermeldung
  • … eine Datei, deren Name mit einem Dateinamen in den Pfaden übereinstimmt, die Sie ausführen find:Der -nameTest stimmt nur mit dieser einen Datei überein
  • ...eine Datei und sie stimmt mit keiner Datei in den durchsuchten Pfaden überein: -namewird nichts passen

Wenn die CWD hingegennichtEnthält alle txt-Dateien, *.txtwird es dann übergeben findund verhält sich genauso, als ob Sie es zitiert hätten.

Moral: Setzen Sie bei der Verwendung findimmer Anführungszeichen um Muster, die Globs enthalten, es sei denn, Sie möchten tatsächlich, dass die Pfadnamenerweiterung erfolgt (dies wird bei dieser -nameOption selten absichtlich getan).

verwandte Informationen