Yanıtlar:
Nedeni GNU geliştiricisi çünkü bunu görüyor yüzden seçtik için "makul" bir davranış sağlamak için hiçbir yol verildiğinde. Buna karşılık POSIX , parametrenin isteğe bağlı olduğunu belirtmez:find
find
Yardımcı
find
program, karşılaşılan her dosya için OPERANDS bölümünde açıklanan primerlerden oluşan bir Boole ifadesini değerlendirerek, yolla belirtilen her dosyadan dizin hiyerarşisini yinelemeli olarak indirecektir. Her yol işleneni, izleyen tüm<slash>
karakterler de dahil olmak üzere, sağlandığı şekilde değiştirilmemiş olarak değerlendirilecektir ; hiyerarşide karşılaşılan diğer dosyalar için tüm yol adları , geçerli yol işleneninin birleştirilmesinden , geçerli yol işleneni<slash>
biriyle bitmediyse ve yol işlenmesine göre dosya adından oluşur. Bağıl kısım nokta veya nokta-nokta bileşenleri içermemeli, arka kısım olmamalıdırkarakterleri ve<slash>
yol adı bileşenleri arasında yalnızca tek karakterler.
Her biri için özetin farkını görebilirsiniz. GNU köşeli parantez içinde isteğe bağlı öğeler içerir:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...]
[expression]
POSIX isteğe bağlı olabileceğini göstermez:
find [-H|-L] path... [operand_expression...]
GNU programında bu yapılır ftsfind.c
:
eğer (boş) { / * * Burada bazı değişkenler kullandığımız için geçici bir değişken kullanıyoruz * yolu geçici olarak. Dolayısıyla bir dize sabiti kullanırsak, * bir coredump alırız. Bunun en güzel örneği, * "find -printf% H" (not, "find. -printf% H" değil). * / char defaultpath [2] = "."; dönüş bulma (defaultpath); }
ve "."
basitlik için bir değişmez değer kullanılır. Böylece aynı sonucu
find
ve
find .
çünkü (ve POSIX kabul eder) verilen yol sonuçların önekini yapmak için kullanılacaktır ( birleştirme için yukarıya bakınız ).
Küçük bir çalışma ile, özellik ilk ne zaman eklendiğini belirleyebilir; Bu mevcuttu 1996 yılında "findutils" ilk oluşturulması (bkz find.c
):
+ /* If no paths are given, default to ".". */
+ for (i = 1; i < argc && strchr ("-!(),", argv[i][0]) == NULL; i++)
+ process_top_path (argv[i]);
+ if (i == 1)
+ process_top_path (".");
+
+ exit (exit_status);
+}
Bulmak için değişiklik günlüğünden, bu görünüşe göre
Sat Dec 15 19:01:12 1990 David J. MacKenzie (djm at egypt)
* find.c (main), util.c (usage): Make directory args optional,
defaulting to "."
Genellikle, dosyalar sonradan işlenir ve bu durumda dosya adının başlatılması için büyük bir avantaj olabilir ./
. Özellikle, bir dosya adı ile başlarsa -
, sonraki komut bu dosya adını bir seçenek olarak yorumlayabilir. ./
bundan kaçınır.
Örnek olarak, bu dosyaları içeren bir dizin düşünün:
$ ls
--link --no-clobber
Şimdi, dosya adları ./
önde olmadan sağlanmışsa bu komutun nasıl çalışacağını düşünün :
$ find -type f -exec cp -t ../ {} +
Sorunu find
kendisiyle açıklayabiliriz. Yukarıdaki ile aynı dizinde çalıştıralım. Aşağıdaki işler:
$ find ./*
./--link
./--no-clobber
Aşağıdakiler başarısız olur:
$ find *
find: unknown predicate `--link'
Try 'find --help' for more information.
file
talep kullanıcı (OS X üzerinde BSD find benzeri) bir yol vermek. Bu yüzden genellikle açıkça bir şey söylemeniz gerekir find . -type f ...
. Oradan, find (GNU find gibi) bazı sürümlerinin varsayılan olarak .
diğer her şeyi olduğu gibi bırakmak ve bırakmak için büyük bir adım değildir .
find *
gösterilmiyor .
çünkü *
tüm listelerin dosyaları ve klasörleri ama dışlar .
. echo *
Yalnızca bir veya iki dosya içeren bir dizinde yapın ve .
listede bulunmadığını göreceksiniz . Böylece find *
genişletilmiş her dosya üzerinde çalışır. find Desktop/
Ana dizinden söylediklerinizle aynıdır . Çıkışı olarak göreceksinizDesktop/foo_bar.txt
find
gibi davranmanın uygun olduğunu belirtir . Bu nedenlefind
bu şekilde davranmak üzere tasarlanan zımni iddiayı destekleyecek yetkili referans bilgileriniz var mı?
find
Komut ihtiyaçları yolu (ler) aramak için. Hiçbirini belirtmezsek .
, başlangıç noktası olarak geçerli dizini ( ) kullanır . Benzer şekilde, yolu geçerseniz, örneğin /tmp
, bunu başlangıç noktası olarak kabul eder. Ve dolayısıyla sonuçlar.
Geçerli dizin ise:
$ find
or
$ find .
output:
./file1
./file2
./file3
Eğer /tmp
dizinde:
$ find /tmp
output:
/tmp/file4
/tmp/file5
Eğer abc
geçerli dizin altında dizinde:
$ find abc
output:
abc/file6
abc/file7
Geçerli dizinin altında birden çok dizin varsa:
$ find fu bar
output:
fu/file10
fu/file11
bar/file8
bar/file9
find
herhangi bir şeyi aramak için bir yola ihtiyaç duyduğunu ve geçerli dizinde varsayılan olduğunu kabul ediyorum . Soru, öncü ile aynı ./
olduğunda neden çıktı yazdırmasıdır . file.txt
./file.txt
Bir yol belirtmezseniz, find
komut ${PWD}
yolu olarak kabul eder ve çıktısına yazdırır. Yolu belirtmeyen kullanıcı find
çalışma şeklini değiştirmez . Ve bul her zaman varsayılan olarak yollarla çalışır.
/tmp
, o $PWD
zaman /tmp
değildir ./
.
/tmp
, komutunu çalıştırın find /tmp
Bir yol belirtmezseniz, her zaman geçerli dizin olur./
/tmp
. Olamaz $PWD
.
${PWD}
yanlış
find .
, find $PWD
ve find
(bir yol olmadan, bulmak destekliyorsa).
find *
.