Dizin yolunu yeniden yazmadan dosyaları yeniden adlandırmanın en hızlı yolu


56

Unix'te dosyaları nasıl yeniden adlandıracağımı biliyorum:

$ mv ~/folder/subfolder/file.txt ~/folder/subfolder/file.sh

     ^-------this part------^    ^------this part-------^

~/folder/subfolder/fileİki kez tekrarlamak çok uzun zaman alıyor .

Daha hızlı bir yolu var mı?

Yanıtlar:


104

Kabuk Eğer desteklenen Brace Genişleme (ile çalışır csh, tcsh, ksh, zsh, bash, mksh, lksh, pdksh, yashile bağ-genişletin arayarak etkin yash --brace-expandveya interative kabuğunda set set -o brace-expandveya fish):

mv ~/folder/subfolder/file.{txt,sh}

4
sade en iyisidir!
Braiam

2
Kabuk parlak genişleme müthiş kullanımı!
harish.venkat

3
Bu ise müthiş, ama gerçekten şifreli. Çalışıyor ama ilk bakışta farklı bir şey yaptığını düşünürdüm: iki dosyayı bir yere taşır. Bunun çok iyi bir fikir olduğunu sanmıyorum, özellikle de kullanımı çok daha iyi bir çözüm olduğu için rename.
yo'

4
@ tohecz: Neden şifreli? Bu, kabuğun bir özelliğidir ve her biri kabuk adam sayfasını okuyarak bunu bilir. Ve bence renamedaha iyi bir çözüm değil çünkü renamesizden varolan dosyayı geçersiz kılmanızı ya da istememenizi istemeyin.
cuonglm

1
@Gucuç adamsın.
başlayanlar

20

Ayrıca kullanabilirsiniz rename(util-linux paketinin bir parçası).

rename .txt .sh ~/folder/subfolder/file.txt

Daha fazla ayrıntı için yeniden adlandırın man sayfasına bakın.


+1 Bu nasıl yapılacağının açık yoludur, mermilerin {a,b}işlevselliğine güvenmekten çok daha iyidir .
yo'

5
Bazı Linux dağıtımlarında (Ubuntu gibi), renametamamen farklı, perl tabanlı bir programdır. Orada kullanırdın rename 's/txt$/sh/' ~/folder/subfolder/file.txt.
evilsoup

Debian (ve Ubuntu) 'da da var mmv.
ctrl-alt-delor

10

Yukarıdakilerin hepsi iyi. Bu da işe yarar:

( cd ~/folder/subfolder && mv file.txt file.sh )

Hayır. Benim için çalışmıyor!
Hamed Kamrava

Parçayı çıkarırsanız işe yarar sudo.
Cthulhu

1
@Cthulhu Evet, hakkınız. Ama neden birlikte çalışmıyor sudo?
Hamed Kamrava

2
@HamedKamrava Muhtemelen kökünün ana dizini olarak sudoyorumlanıyor çünkü ~.
Cthulhu

Yapabilirsiniz ama . Cd inşa edilmiş bir kabuk neden Bkz Ve olamaz.sudomvcdsudo(
ctrl-alt-DELOR

6

Hayır. Yeniden adlandırmak için dosyanın tam yolunu belirtmeniz gerekir. Tek alternatif, çalıştırmadan önce hedef klasöre taşınmaktır mv:

cd ~/folder/subfolder/
mv file.txt file.sh

Alternatif olarak, dosyayı hedef dizinde yeniden adlandıran küçük bir işlev yazabilirsiniz. Örneğin, bu satırları kabuk başlatma dosyanıza ekleyin ( ~/.bashrckullanıyorsanız bash):

lmv(){
    _path=$(dirname -- "$1")
    _target="${_path%/}/$2"
    mv -- "$1" "$_target"
}

Ardından, yeni bir terminal açın veya source ~/.bashrcinit dosyasını yeniden okumak için çalıştırın ;

lmv ~/folder/subfolder/file.txt file.sh

lmv()İşlev için +1 . Bunu bilmiyordum :)
Hamed Kamrava

1
@HamedKamrava kimse bilmiyordu. Daha yeni yazdım, standart bir şey değil.
terdon

2
Biliyorum. Yani, kendi fonksiyonumu yazabileceğimi bilmiyordum!
Hamed Kamrava

2

Sadece cuonglm'in cevabının faydasını arttırmak (çözümünü sevdiğim kadar herhangi bir kredi almamak) ve cevabı doğru.

Kullanım durumu, genellikle uzak bir konumdaki bir dosyayı (asıl sayı) mv yapmak istediğimizdir, örneğin /folder/subfolder/configFile.dat TO configFile.dat.orig

Komutun bu formu bir dosya uzantısı ekler (orijinal uzantı yerine değil)

mv ~/folder/subfolder/file.txt{,.orig}

Açıklanan: "{, .orig}", dosya adının sonundaki (bir şey) ".orig" ile değiştirilen (hiçbir şey) anlamına gelir.

VEYA bir dosya uzantısını kaldırmak için (yeniden adlandırmayı tersine çevirin)

mv ~/folder/subfolder/file.txt{.orig,}

Not: Hala "dizin yolunu yeniden yazmadan dosyaları yeniden adlandırmanın en hızlı yolu" konusuna devam ediyor


1

Evet. Eğer kullanırsan bash, yaparsın sudo pushd ~/folder/subfolder/ && sudo mv ./file.txt ./file.sh && popd.

Aslında daha büyük olan ve yaptığınız sırada orijinal dizine erişim izninizi kaybettiyseniz başarısız olabilir popd.


1
Burada pushdve popdburada ne var ? Bundan daha iyi ne olabilir cd ~/folder/subfolder/ && sudo mv file.txt file.sh?
terdon

1
Mesele şu ki, herhangi bir alt klasörde değil, başlattığınız klasörde komuttan sonra olduğunuza. Bunun bir alternatifi pushd popdkullanmak cdve geri dönmek cd -.
jofel

Anketör, çalışma dizinini değiştirmeme niyetini belirtiyor gibiydi ve mümkün popdolduğunda daha iyidir cd ../../.
41754

7
Kullanın (cd /path/to/there && mv x y)(bir
deniz kabuğu ile

Gerçekten daha sudoönce koymamalısın pushd. Yani tam komut olmalı pushd ...dir && sudo mv old new && popd. Alternatif olarak, (cd ...dir; sudo mv old new)alt kabukta çalışan dizin değişikliklerini otomatik olarak halledeceğinden biri yapabilir .
Mikko Rantalainen
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.