Wie liste ich Dateien auf, die nur einen Teil ihres Dateinamens enthalten?

20836
user663724

Ich habe zum Beispiel viele Dateien in einem Ordner

Kiran.txt Kiran1.txt Kiran221.txt Kiran144.txt Time.csv Timer.csv Timer2.csv Timer444.csv Timer266.csv Account.sh Account3.sh Account3333.sh Account3333.sh Account333333.sh 

Von diesem Verzeichnis aus möchte ich wissen, wie ich grepDateien anzeigen kann, die auf einem Teil ihres Dateinamens basieren - zum Beispiel Dateien, die mit "Konto" beginnen oder die auf ".sh" enden.

3
Danke @DMA, ich wollte einfach das Gleiche tun, du warst eine Sekunde schneller. user663724, wenn Sie ähnliche Fragen haben, warum gruppieren Sie sie nicht in einer? slhck vor 12 Jahren 0
Schöne Bearbeitung, ich dachte, ich habe mir zuerst eine andere Frage angesehen, bis mir klar wurde, dass Titel und Inhalt geändert wurden, um die Frage für ein breiteres Publikum nützlicher zu machen. Joe Taylor vor 12 Jahren 0

4 Antworten auf die Frage

8
ajreal

Sie können find

find -type f -name "Account*" 

Alternative 2 (dazu kann auch ein Ordner gehören)

ls -1 Account* 

Alternative 3 (grep, dazu könnte auch Ordner gehören)

ls -1 | grep -E "^Account" 
Ich bevorzuge `find` :-) ajreal vor 12 Jahren 1
7
slhck

Verwenden Sie einen Platzhalter ( Was ist dieser Platzhalter? ):

ls *.sh 

Das *wird alles vor dem .shgewünschten Ende finden. Verwenden Sie die anderen lsOptionen zum Anzeigen, z. B. -lum eine lange Auflistung zu erstellen. Sehen Sie man lsfür weitere Informationen über das, was Sie damit machen können.

Beachten Sie, dass lsauch jede Liste würde Verzeichnis mit der Endung .sh, nicht nur Dateien.


Sie können finddieses Problem auch überwinden.

find . -type f -maxdepth 1 -name "*.sh" 

Dieser Befehl listet nur "echte" Dateien auf. Die Verwendung von find würde ich empfehlen, wenn Sie danach etwas mit den gefundenen Dateien tun möchten. Sie können dies mit der -execOption tun .

Für OP: Zusätzlich kannst du auch verwenden? für einen einzelnen charector wie in "hel? o" um "hallo" und "helwo" zu finden Sirex vor 12 Jahren 0
Ich würde im Suchbefehl Anführungszeichen um `* .sh` setzen, da sonst die Shell sie auf` find erweitern würde. -type f -maxdepth 1 -name Account.sh Account3.sh Account3333.sh Account333333.sh` im Fragebeispiel. BennyInc vor 12 Jahren 1
@BennyB Richtig, ich habe sie beim Kopieren vergessen. Vielen Dank! slhck vor 12 Jahren 0
3
Kilian Foth

Die Standardlösung ist eine Pfeife:

ls | grep ^Account 

Mit etwas so einfachem wie "Dateien, die mit Account beginnen" würden Globs auch funktionieren:

ls Account* 

Im Allgemeinen ist ein Grep jedoch leistungsfähiger und es besteht nicht die Gefahr, dass die maximale Befehlszeilenlänge überläuft, wenn der Ordner wirklich sehr voll ist.

3
Nirmal- thInk beYond

Verwenden Sie den folgenden Befehl

 ls *.sh