name seçeneği düzenli ifade (regular expression) değil glob/wildcard kullanır. dolayısıyla "*" karakterini kullanabiliriz. Açıklaması şöyle
The -name predicate takes a glob, not a regular expression.Wildcard dilediğimiz yerde kullanılabilir. Wildcard not ile birlikte kullanılabilir. Not için istersek harfle "not" veya "!" yazabiliriz.
In a regular expression, * would match zero or more of the preceding item. But since this is a glob, it matches zero or more of any character. That is, * in a glob means the same thing as .* in a regular expression.
2. -regex Alternatifi
Açıklaması şöyle. glob/wildcard yerine regex kullanmak mümkün ancak ben bu yöntemi hiç sevmedim.
GNU find's -regex non-standard extension does take a regexp (old style emacs type by default), but that's applied on the full path (like the standard -path which also takes wildcards), not just the file name (and are anchored implicitly)So to find files of type directory whose name starts with machine, you'd need:find . -name 'machine*' -type dOr:find . -regextype posix-extended -regex '.*/machine[^/]*' -type d
-name yerine - regex ne zaman lazım olur?
Elimizde şöyle bir komut olsun. Bu komut çalışmaz. Çünkü -name ile globbing yerine brace expansion yapılmaya çalışılıyor
find $directory -name '*.[hc]' -exec clang-format -i {} \;
Bu gibi durumlarda regex daha iyi. Şöyle yaparız
find . -regextype posix-extended -regex '.*\.(c|h|cpp)'
3. Kullanım
Örnek - karakter sayısı
Şöyle yaparız
find "$HOME" -type d -name 'bowtie*1.[!2]*'
Açıklaması şöyle
The pattern matches names starting with bowtie and then contains 1.n, where n is not 2.
Örnek - not name kullanımı
Şöyle yaparız. Bu sefer not için harfle "not" kullanılıyor.
Şöyle yaparız.
İsmi belirtilen örüntüye uymayanları listelemek için not kullanılır. İsmi "." ve ".." olmayan dizinleri bulmak için şöyle yaparız.
İsmi master ile başlayan ancak master-2018 ile başlamayanları silmek için şöyle yaparız.
mp3 dosyalarını bir üst dizine taşımak için şöyle yaparız.
unl uzantılı dosyaları bulmak için şöyle yaparız.
$ find -not -name mongodb.log -name "*.log"
Örnek - not extension kullanımıŞöyle yaparız.
find src -type f -name '*.ts' ! -name '*.d.ts'
Örnek - not name kullanımıİsmi belirtilen örüntüye uymayanları listelemek için not kullanılır. İsmi "." ve ".." olmayan dizinleri bulmak için şöyle yaparız.
find . -maxdepth 1 -type d ! -name "\.*"
Örnek - and name ve not name kullanımıİsmi master ile başlayan ancak master-2018 ile başlamayanları silmek için şöyle yaparız.
$ find -name 'master*' \! -name 'master-2018*' -print0 |
xargs -0 echo rm -fr
Örnek - extensionmp3 dosyalarını bir üst dizine taşımak için şöyle yaparız.
find . -path "*/flac/*" -name '*.mp3' -execdir mv -t ../ {} +
Örnek - name + extensionunl uzantılı dosyaları bulmak için şöyle yaparız.
find . -type f -name 'cbs_cdr_vou_20180615*.unl' -exec cat {} + >/home/fifa/cbs/test.txt
Hiç yorum yok:
Yorum Gönder