Bu komut neden her şeyi sildi?


4

Bu komutu bir Unix kutusunda çalıştırıyorum:

find . name CVS -exec rm -fr {} \;

Denilen herhangi bir dosyayı silmek istedim CVS Geçerli dizindeki herhangi bir dizinde ve her şeyi sildi.

Neyse ki kurtarmak için tek yapmam gereken CVS'den tekrar kontrol etmek oldu. Belirttiğimi düşünün / başlangıç ​​dizini olarak!

Sanırım sebebim kullandım name yerine -name. Ben sadece tekrar olarak

find . -name CVS -exec rm -fr {} \;

Ve iyi çalışıyor gibi görünüyor. Tam olarak ne olursa name aksine kullanılır -name?


3
Bu nedenle, dosyaların üzerine yazabilecek veya silebilecek komutlar konusunda her zaman çok dikkatli olmalısınız. İşte test etmek için kullanışlı bir yol find … -exec echo rm -fr {} \;.
Gilles

@Gilles Lütfen önerdiğiniz komutu açıklayabilir misiniz? Teşekkür ederim.
Eugene S

2
@Eugene, fark echo Aksi takdirde çalıştırılacak olan komutu basan kısım. Üç nokta sadece Gilles örneğindeki diğer parametreleri tekrar etmeme yoludur. Yani, tam sürüm find . name CVS -exec echo rm -fr {} \;
Arjan

@Arjan Yorumunuz için teşekkür ederiz. Elipslerin altında "_" altını kastettiğinizi düşünüyorum, değil mi?
Eugene S

1
Evet, @Eugene, bunlar aslında üç küçük nokta !
Arjan

Yanıtlar:


7

Daha önce çizgi eksik -name, bu yüzden arıyordu yolları adlı ., name ve CVS, nokta geçerli klasöre referansta bulunur, bu nedenle hepsini siler.

Find yardımcı programı, listelenen her yol için dizin ağacını yinelemeli olarak alır.

Kullanarak kolayca test edebilirsiniz echo Çalıştırmak istediğiniz komuttan önce:

find . name CVS -exec echo rm -fr {} \;

Evet sadece fark ettim :) Teşekkürler.
ziggy

@ziggy, düzenlememi kaçırma ihtimaline karşı: bu yüzden arıyordu yolları adlı name ve CVS.
Arjan

Evet bu mantıklı. Bu emre çok dikkat etmeliyim. Teşekkürler
ziggy

Adlı yollar name CVS ve belli ki .bulundu.
Rob
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.