Komut argümanı gibi bir isme sahip bir dosya kaldırılamıyor [duplicate]

20

Yanlışlıkla, ev dizinimde -r adlı bir dosya oluşturdum. Şimdi ondan kurtulamıyorum:

rm -rf
rm: missing operand
Try 'rm --help' for more information.

Diğer girişimler:

rm /-/r
rm: cannot remove ‘/-/r’: No such file or directory

Başka bir tane:

rm \-r
rm: missing operand
Try 'rm --help' for more information.

Tüm dosyayı silmeden bu dosyayı kaldırmanın bir yolu var mı?

    
sordu Justin 12.06.2014 10:47

5 cevap

25

Bu durumda, komut argümanlarınızda çift çizgi ( -- ) kullanmanız gerekir.

Bunun amacı, komuta, komutun argümanı olarak değil, basit bir girdi olarak alınmasının gerekli olduğunu söylemektir. rm durumunda, bir dosya veya dizin adı.

Yani rm -- -r yazıp bu dosyadan kurtulmalısınız.

    
verilen cevap Benoit 12.06.2014 10:49
44

Bunu yapmanın birçok yolu var:

  1. Seçenek bayraklarının sonuna işaret eden -- 'ı ve birçok program için argüman listesinin başlangıcını kullanın ( rm dahil olmak üzere).

    rm -- -r
    
  2. Tam yolu kullan

    rm /home/you/directory/-r
    

    veya aynı dizinden (geçerli dizininiz . olarak adlandırılır):

    rm ./-r
    
  3. find

    kullanın
    find . -name "-r" -exec rm {} \;
    

    veya tüm bu dosyaları almak için

    find . -name "-*" -exec rm {} \;
    
  4. Çirkin bir hack kullanın. Her şeyi farklı bir dizine taşıyın (bu -r dosyası için rm ile aynı nedenden dolayı başarısız olur) ve daha sonra özgün dizini (dosyayı kaldıracak) silecek ve her şeyi tekrar geri taşıyacaktır. Bu nedenle, -r dosyanızın ~/foo dizininde olduğunu varsayalım:

    $ mkdir ~/bar
    $ for f in *; do mv "$f" ../bar/; done
    mv: invalid option -- 'r'
    Try 'mv --help' for more information.
    $ rm -rf ~/foo
    $ mkdir ~/foo && cd ~/foo
    $ mv ~/bar/* .
    $ rmdir ~/bar
    
verilen cevap terdon 12.06.2014 10:59
8

Ayrıca, bu dosyaları ('-' ile başlayan) bu komutla da silebilirsiniz:

rm ./-r

rm man sayfasına bakın:

  

Adı '-' ile başlayan bir dosyayı kaldırmak için, örneğin '-foo',       bu komutlardan biri:

rm -- -foo

rm ./-foo
    
verilen cevap Sylvain Pineau 12.06.2014 10:59
2

Veya dizinin tam yolunu rm komutunda belirtebilirsiniz,

Örnek:

rm -rf ~/Desktop/-r
    
verilen cevap Avinash Raj 12.06.2014 11:05
1

Ayrıca, herhangi bir seçenek olmayan tek link komutunu (eğer varsa) ve tek bir argümanı da kullanabilirsiniz. Bu nedenle, unlink -- -r , -r adlı bir dosyayı kaldıracaktır

    
verilen cevap Abigail 12.06.2014 15:27

Etiketlerdeki diğer soruları oku