Dateiname zu lang Fehler mit Befehl 'stat'

7

Ich rufe eine Buchliste ab, nachdem ich die Python-Bücher im Home-Verzeichnis mit diesem Befehl unter OSX gesucht habe:

    find ~ -type f -iregex '.*python.*\.pdf'

die Buchliste

    ...
    .../Computing/Python/Beginning_Python.pdf
    .../Python/Core.Python.Applications.Programming.3rd.Edition.pdf
    .../Python/Packt.Mastering.Python.2016.4.pdf
    ...

Ich beabsichtige, ihren Status mit Befehl xargsund zu überprüfenstat

    $ find ~ -type f -iregex '.*python.*\.pdf' | xargs stat -x
    # get error
    xargs: unterminated quote

Versucht alternativ mit Option -0

    find ~ -type f -iregex '.*python.*\.pdf' | xargs -0 stat -x 
    # get error
    : stat: File name too long

Wie kann man ein solches Problem lösen?

Infinitesimalrechnung
quelle
das ist unter OSX, nehme ich an? ( stat -x)
Jeff Schaller
1
Beachten Sie, dass dies -iregex '.*python.*\.pdf'am übereinstimmt /path/to/python/whatever/foo.pdf. Wenn Sie mit Dateien übereinstimmen möchten, deren Name (im Gegensatz zum vollständigen Pfad) enthält pythonund endet .pdf, verwenden Sie -iname '*python*.pdf'oder-iregexp '.*python[^/]*\.pdf'
Stéphane Chazelas

Antworten:

6

-0to xargs macht wenig Sinn, wenn Sie die Eingabe nicht so ändern, dass sie 0-getrennt ist. Versuchenfind ~ -type f -iregex '.*python.*\.pdf' -print0 | xargs -0 stat -x

Henrik unterstützt die Community
quelle
1
Einige xargsImplementierungen haben auch die -rOption, den Befehl nicht auszuführen, wenn die Eingabe leer ist (unter FreeBSD ist dies implizit).
Stéphane Chazelas