`Mv file / dir` neden dosyayı geçerli çalışma dizininin bir alt dizinine taşımıyor?


10

/etcDizinin içindeydim ve komutu yazdım

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn

Bu dosyayı dizinin openvpnbir alt dizini olan dizine taşıyacağını düşündüm /etc. Ancak, olan bu değildi. Onaylayabildiğim tek şey, komutun yürütüldüğü.

Yanıtlar:


51

Bu ada sahip bir dizin yoksa, dosyayı openvpnkök dizininizde yeniden adlandırdınız /. Bunu geri almak için şunu çalıştırın:

sudo mv /openvpn /etc/MyFile.conf

Dizin mevcutsa, dosyayı içine taşıdınız, tersine çevirme şu şekildedir:

sudo mv /openvpn/MyFile.conf /etc/

Geçerli dizinin varolan bir alt dizinine taşımak için, bunlardan herhangi birini çalıştırabilirsiniz; bunlar göreli yolları kullanır :

mv MyFile.conf openvpn
mv MyFile.conf openvpn/
mv MyFile.conf ./openvpn
mv MyFile.conf ./openvpn/

.geçerli dizine bir bağlantı olduğundan, ./yolun başında “bu dizinde” anlamına gelir. Sondaki eğik çizgi openvpn, bir dizin olduğu ve dosyayı içine taşımak istediğiniz anlamına gelir . Bunu girmezseniz, dosya edilecektir taşındı bu isimde bir dizin başka dosya olacak, varsa onun içine değiştirildi için openvpn. Bir ile /sonunda, mvdizin eksik ve eğer sizi uyarır değil adlandırmak o Yeniden adlandırmak istemiyorsanız güvenli bir yolu böylece.

Yolunuz ile başlıyorsa /diğer taraftan bir var mutlak daima kök dizinine göre değil, yol ne olursa olsun bulunulan dizinin /. Hem dosya hem de hedef için mutlak yollar kullanmak komutunuz şöyle görünecektir:

mv /etc/MyFile.conf /etc/openvpn
mv /etc/MyFile.conf /etc/openvpn/

daha fazla okuma


2
Dizinin var olup olmadığını bilmiyorsanız, önce sudo mv /openvpn/MyFile.conf /etc/komutu deneyin . Olası senaryoda dizin mevcut değildi, sadece bir hata (muhtemelen "Dizin değil") verir ve dosya sistemine dokunmaz. Sonra, sadece yapabilirsiniz sudo mv /openvpn /etc/MyFile.conf.
flarn2006

9

Kullanmalısın

me@mylaptop:/etc$ sudo mv MyFile.conf openvpn/

MyFile.confdosyayı openvpnalt dizinine taşımak için /etc/.

Diğer yandan

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn

bunun yerine dosyayı /dizine taşıyacaktır openvpn(yani, yeniden adlandır openvpn) ( /openvpndizinin mevcut olmadığı varsayılarak ).


3
Ayrıca, ilk komutun sonundaki eğik çizgi isteğe bağlıdır. Ama sanırım OP'nin açıklandığı gibi kafa karıştırıcı bir durum yaratmak yerine (veya daha da kötüsü, önemli bir dosyanın üzerine yazılması) komutun bir dizin değilse başarısız olması iyi bir alışkanlık.
flarn2006

4

Bir dosyayı taşıdığınızda, işletim sistemine içine koymak istediğiniz dizini veya vermek istediğiniz yeni yolu bildirirsiniz.

İşletim sistemine "/ openvpn" dediniz. Bu tam olarak bunu yapacaktır - / openvpn'in var olup olmadığını kontrol edin (kök dizinde bulunan "openvpn" adlı bir nesne anlamına gelir) ve bir dizin olup olmadığını ve eğer varsa dosyanızı içine taşıyın veya / openvpn bir dosyaysa veya mevcut değilse, dosyanızı şimdi / openvpn olarak erişilebilecek şekilde yeniden adlandırın ve taşıyın.

Sen ne yapmak istediği taşımak oldu geçerli dizinde bulunan olmaktır bir dizin "openvpn", içinde , ( "/" nı lider budur) dosya sistemi kök dizininde olanı değil. Bu yüzden , mutlak "/ openvpn" yoluna değil, move komutundaki o dizine işaret etmek zorundaydınız . Bunlardan herhangi biri çalışacaktır:

  • mv MyFile.conf openvpn - bu "openvpn" için şu anki dizinime bak
  • mv MyFile.conf /etc/openvpn - mutlak yol / etc / openvpn arayın
  • mv MyFile.conf openvpn/ - şu anki dizinime bak, openvpn adlı bir dizin için
  • mv MyFile.conf ./openvpn - "mevcut yön" ü daha belirgin hale getirir

Kısa versiyon - büyük olasılıkla "mevcut dizinim", "/ openvpn", "mevcut dizinimdeki" openvpn "anlamına gelir. Ancak önde gelen "/" yalnızca "kök dizin" anlamına gelir, bu nedenle "/ openvpn", "kök dizinde openvpn" anlamına gelir. İhtiyacınız olan şey "openvpn" veya "openvpn /" kullanmaktı, yani " şu anki dizinimde openvpn " kullanmaktı.


1
Bu cevabın neden reddedildiğinden emin değilim; doğru ve bence en açık olanı!
Yörüngedeki Hafiflik Yarışları

1

İle başlayan herhangi bir yol / göreceli değil, mutlak bir yoldur.

Tüm yollar her zaman geçerli dizine göreli olsaydı cd /etc, ilk etapta nasıl olurdu ? Bunun cd ../../../../../etcyeterli seviyelerde olduğunu ve..cd .. zorundasınız ve kök dizine gelene kadar yapmaya devam edersiniz.

Veya mutlak yolları ifade etmek için başka bir sözdizimine ihtiyacınız olacaktır. Ancak Unix /, sürecin mevcut çalışma dizinine göre başka bir şey olan mutlak anlam üzerine karar verdi . Yanimv MyFile.txt openvpn işe yarar.


Ve hayır, varolan dosyalardan mutlak ve göreceli çıkarım yapmak iyi olmazdı. mkdirSistem çağrılarının yolları farklı şekilde işlemesini chdirveya renamesistem çağrılarını istemesini istemeyiz ve mvprogramı yapmak, sadece arasındaki tutarsızlığa yer açar.mv bir çıktı dosya adı alan diğer programlar .

mvrename()hedef zaten bir dizin olduğunda, kaynak dosya adını bu hedef dizine ekler ve yeniden dener. Ancak, basit bir uygulama stratejisinin, rename()başarısız olan ilk sistem çağrısına dayandığına dikkat edin.EEXIST veyaEISDIR . Bu nedenle, dosya sistemini kontrol etmeden önce bir yolun göreceli mi yoksa mutlak mı olduğunu bilmeliyiz.

(Erken Unix, bir dizinin mevcut olup olmadığını fazladan kontrol etmek, önbelleğe alınmamışsa fazladan G / Ç veya dizin önbelleğe alma üzerinde daha fazla baskı anlamına gelebilecek yavaş bilgisayarlarda çalışıyordu. tarihsel verimlilik argümanlarına başvurmadan sistemin çalışması için makul bir yol değildi.)


1

Diğer cevapları tamamlamak için:

mv file.txt /location

Windows ile aynıdır

mv file.txt c:\location

Dosya sistemi linux uygun olarak düşünülmektedir dosya sistemi hiyerarşisi standardına veya FHS kısaca. bir dosyanın niteliğine ve içeriğine bağlı olarak nereye yerleştirilmesi gerektiğini bilmenize yardımcı olur.

İlk klasör ( c:Windows'takine eşdeğerdir ) /.

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.