Her şeyden önce, dosyaların içeriğinigrep
arar , dosya adlarını aramaz. Bunun için . Dosya adı uzunluğunu ayarlama seçeneği yoktur, ancak istediğinizi elde etmek için çıktısını ayrıştırabilirsiniz. Aşağıdaki dosyaları içeren bir dizinde çalıştırdığım bazı örnekler:find
$ tree
.
├── a
├── ab
├── abc
├── abcd
└── dir
├── a
├── ab
├── abc
└── abcd
Bu dizindeki dosyaları aramak şunları döndürür:
$ find . -type f | sort
./a
./ab
./abc
./abcd
./dir/a
./dir/ab
./dir/abc
./dir/abcd
Bu nedenle, X uzunluğundaki dosyaları bulmak için yolu kaldırmamız ve yalnızca sonuncudan sonraki karakterlerle eşleşmemiz gerekecek /
:
$ find . -type f | grep -P '/.{3}$'
sed
Komut sadece kaldırır ./
. -P
Bayrak için gerekli olan Perl Uyumlu Düzenli İfadeler aktive {n}
bir PCRE şey ve hangi $
vasıta "dizesinin sonuna maç".
Ayrıca bunu kolayca yapabilirsiniz:
find . -type f | grep -P '/...$'
15 sayı uzunluğundaki dosya adlarını eşleştirmek için 15 nokta yazarak küçük sayılar için bu çok verimli değildir.
Son olarak, uzantıyı yok saymak ve yalnızca dosyanın adıyla eşleşmek istiyorsanız, bunu yapın (@slm'nin önerdiği gibi):
find . -type f | grep -P '/.{1}\.'
Ancak, bu aynı zamanda dosyaları bulur a.bo.go
. Dosya adlarınız birden fazla içeriyorsa bu daha iyidir .
:
find . -type f | grep -P '/.{1}\.[^.]+$'
NOT: Yukarıdaki çözüm, yeni satır karakterleri vb. İçermeyen nispeten aklı dosya adlarına sahip olduğunuzu varsayar. Ayrıca, istediğiniz şey olmayabilir uzunluğu hesaplarken dosya adlarındaki boşlukları dikkate almaz. Bunlardan herhangi biri bir sorunsa, bana bildirin, cevabımı güncelleyeceğim.
a.go
4 uzunluğundaa
bir dosya adıdır. 1 uzunluğunda bir dosya adıdır. Bu, ad ve uzantı ayrı olan ve örtük.
olan her zaman dosya adının bir parçası olan DOS değil, Unix'tir .