it-swarm-tr.com

Adı "-" (kısa çizgi a.k.a. tire veya eksi) ile başlayan bir dosyayı nasıl silebilirim?

Dosya adı kısa çizgi (tire veya eksi) ile başlayan bir dosyayı nasıl kaldırırsınız -? Uzak bir OSX sunucusuna ssh'd ve dizinimde bu dosya var:

tohru:~ $ ls -l
total 8
-rw-r--r--    1 me  staff  1352 Aug 18 14:33 --help
...

Dünyada nasıl silebilirim --help CLI'dan mı? Bu sorun bazen farklı şekillerde karşılaştığım bir şey, bu dosyaları oluşturmak kolay, ancak kurtulmak zor.

Ters eğik çizgi kullanmayı denedim

rm \-\-help

Alıntıları denedim

rm "--help"

Eksi (tire veya tire) karakterinin bir seçenek olarak yorumlanmasını nasıl önleyebilirim?

377
Bryan Rehbein

Rm komut satırı seçeneklerini ayrıştırmayı durdurmak için aşağıdaki gibi "-" kullanın:

rm -- --help
559
Vegar Nilsen

Veya yapabilirsin

rm ./--help
236
edfuh

Bunu yapmak için find kullanın:

find . -name '--help' -delete

Ve bu iyi bir yöntemdir, çünkü silebileceğiniz birkaç dosyadan daha fazlasına sahipseniz, önce -delete Seçeneği olmadan find'ı çalıştırarak dosyaların bir önizleme listesini alabilirsiniz ve sonra liste dosyalardan iyi görünüyor -delete ile tekrar çalıştırın.

Aslında, rmfind lehine kullanmaktan kaçınmak (özellikle önce önizlemede), bir gün kaçınılmaz olarak sizi ısırmak için rm * Hatalarından kaçınmanıza yardımcı olacak iyi bir alışkanlıktır. .

Bununla birlikte, bu bulgunun tüm alt dizinlerinizde yineleneceğini unutmayın, bu nedenle bunu aşağıdaki gibi bir alt dizin derinliği kısıtlamasıyla çalıştırmak isteyebilirsiniz:

find . -maxdepth 1 -name '--help' -delete

bulmayı geçerli dizine sınırlar.

41
aculich

Vegar Nilsen ve edfuh'un cevapları çok iyi ve böyle bir soruna doğru çözümler.

Bu soruya, zor bir dosya adıyla dosyayı silmenizi sağlayan genel bir yanıt eklemek istiyorum. İlk önce inode numarası ls -i veya stat biçiminin bir biçimi kullanılır ve ardından geçerli dizindeki dosyaları inode numarasına göre arayarak ve dosyada eşleşen bir inode numarasıyla rm komutunu yürüterek dosya kaldırılır.

find . -inode <inode> -exec rm {}\;

İnode numaraları her dosya sisteminde benzersiz olduğundan, bunu kullanarak herhangi bir dosyayı kaldırabilirsiniz; unicode veya kaçış karakterleri kullanma. Bu satır yazmak için ne kadar can sıkıcı yani satır eklemenizi tavsiye ederim

TAB: menu-complete             # Tab: Cycles through the command
"\e[Z": menu-complete-backward # Shift-Tab: Cycles backwards

içine .inputrc dosyası bash kullanıyorsanız. Bu, olası tamamlamalar listesinde dolaşmanıza izin verir ( daha fazla bilgi için ).

21
Baldur

Acımasız bir çözüm:

Perl -e "unlink '--help' or die 'Could not unlink.';"

Perl -e "rmdir '-d' or die 'Could not rmdir.';"
11
Thomas L Holaday

Linux Kısa çizgiler ve boşluklar içeren bir dosya oluşturma, sonra kaldırma.

DİKKATLİ OL! Yanlışlıkla bir rm -rf / veya benzeri bir basamaklı silme komutu.

Kaldırmaya çalıştığınız dosyada yıldız işaretleri veya eğik çizgiler varsa, yanlışlıkla bir . veya /* veya * veya işletim sisteminizi kademeli olarak silebilecek başka bir joker karakter.

"--yo yo" adlı bir dosya oluşturun

[email protected] ~ $ touch -- "--yo yo"
[email protected] ~ $ ls
bin  --yo yo

Öncelikle find ile bulun:

[email protected] ~ $ find . -name "*--yo yo*"
./--yo yo

Bul komutunun SADECE silmek istediğiniz ONE dosyasını bulduğundan emin olun:

Sonra bulmak, silmek için -delete seçeneğini iletin:

[email protected] ~ $ find . -name "*--yo yo*" -delete
[email protected] ~ $ ls
bin  

Ve gitti.

8
Eric Leschinski

Geceyarısı Komutanı (mc) en kolayı, sadece üzerine gelin ve F8'e basın;)

2
Marcin

i̇şte bu konu bulmadan önce kullandığım bir çözüm.
dizini 'düzenlemek' için vim kullanın:

vim .

ardından (vim içinde) dosyanızı seçin, del tuşuna basın ve silme işlemini onaylayın.
işiniz bittiğinde :q

1
atti

Dizin adını önek olarak eklemeyi denediniz mi:

$ rm ./-filename.txt dirname/-filename2.txt
$ mv ./-filename.txt filename.txt
$ cp teste ./-teste

Dizinin genel olarak dosyanın öneki olarak kullanılması, "eksi" karakterinin ayrıştırıcı işlevi tarafından komut seçeneği olarak yanlış yorumlanmasının önlenmesine yardımcı olur.