Wie finde ich Dateien, die Zeilenumbruch im Dateinamen enthalten?

10

Ich versuche, Dateien zu finden, deren Dateiname einen Zeilenumbruch enthält. Aber ich kann nicht herausfinden, welches Muster ich verwenden soll.

Das Folgende funktioniert, ist aber nicht sehr nützlich, wenn ich es in eingerücktem Code verwenden möchte.

find . -name '*
*'

Ich habe diese beiden ausprobiert und es gelang ihnen nur, Dateinamen zu finden, die den Buchstaben n enthielten :

find . -name '*\n*'
find . -name "*\n*"

Dann fand ich heraus, wie man Backslash-Escape-Sequenzen schreibt, und versuchte dies:

find . -name "*$'\n'*"

Aber das findet nichts. Wie soll ich das Muster schreiben?

Toxalot
quelle

Antworten:

13

Beim Shell-Scripting ist alles eine Zeichenfolge. Sie tun müssen , die zitieren *zu verhindern Dateinamen Expansion , aber Sie wollen nicht die Backslash - Escape - Sequenz in doppelten Anführungszeichen setzen.

Sie können die Zeichenfolgen einfach verketten, indem Sie sie direkt nacheinander platzieren.

find . -name '*'$'\n''*'

Zur besseren Lesbarkeit können Sie jedoch ANSI-C-Anführungszeichen für die gesamte Zeichenfolge verwenden.

find . -name $'*\n*'
Toxalot
quelle