cp veya mv dosyaları ben zaten başka bir konumdayken aynı dizine?


12

İçindeysem ~/blobve dosyam varsa~/blob/a_long_directory_name/c/x.x

Yazabilirim

mv blob/a_long_directory_name/c/x.x blob/a_long_directory_name/even_more/y.y

Ben ilk param (şimdiki dizimi olsa da) dizin yolunu kullanan kısa bir şey yazabilirsiniz herhangi bir kısayol var mı, eg

mv blob/a_long_directory_name/c/x.x $same_dir/y.y

gibi bir şey $same_dirparam dir işaret eder 1

Yanıtlar:


8

Yazma miktarını en aza indirmek için, muhtemelen iki adımda yapmak en kolayıdır. CD'yi dizine taşıyın ve taşıyın.

Yalnızca bir komutunuz varsa, alt kabuk kullanabilirsiniz:

$ (cd blob/a_long_directory_name/c/ && mv x.x y.y )

Bu cd, yalnızca alt kabukta yürürlüğe gireceği anlamına gelir, ancak mvyalnızca cdbaşarılı olduğunda ve geçerli kabuğunuzun çalışma dizini değişmezse gerçekleşir.

Birden fazla komutunuz varsa, dizin yığınını kullanın.

$ pushd blob/a_long_directory_name/c/
$ mv x.x y.y
$ mv z.z q.q
$ popd

Bu even_moregöreceli yolu ele almıyor ...
Yararsız

Bu doğru. $ Same_dir örneği de bunu görmezden geliyor gibiydi.
Alan Shutko

+1 Beğendim. Hatırlaması ve yapması çok kolay ve bu benim için önemli
Michael Durrant

İlginç, çünkü ne istersen yapmaz. Belki sorunuz tam olarak istediğiniz gibi değildir?
Yararsız

Yararsız, başlığımı güncelledim, cp / mv dosyalarıyla ilgili olduğunu açıklığa kavuşturdum ve başka bir yerde olsam da aynı dizinde tuttum. btw kullanıcı adınız sevimli ama yorumlarda kullanıldığında aptalca görünmesini sağlıyor :)
Michael Durrant


5

Kabuğunuzun metin değiştirme yeteneklerini kullanabilirsiniz. In bash, gibi bir canavar kullanabilirsiniz:

mv blob/a_long_directory_name/c/xx !#:$:gs^c/xx^evenmore/yy

Yıkmak için:

!# şimdiki satır şimdiye kadar yazılmış mı

:$dikkate alınan dizenin son kelimesini ( 'kelimeyi nseçmek için bir sayıyla değiştirin) seçmenizi ister n( !#bu durumda). Şimdiye kadar yazılan satırın son sözcüğü önceki kelimedir.

:gs^xx^yysonuç kelimesinde global ( g) metinsel ikame ( s) yapar, 'xx' yerine 'yy' değiştirir. kalıplarınızda kullanılmasına izin veren komut için ^bir sınırlayıcıdır .s/

Bu yöntem, yolun herhangi bir bölümünü ('xx') başka bir kelimeyle ('yy') değiştirmenize izin verdiği için biraz daha geneldir.

Son olarak, herhangi bir geçmiş manipülasyonunda olduğu gibi, uygun kabuk seçeneklerinin (örn ~/.bashrc. Bu durumda

shopt -s histverify

döndürdüğmesine bastıktan sonra düzenlenen satırı görüntüleyecektir, böylece yine de düzenleyebilir ve hataları kontrol edebilirsiniz.

Neden böyle bir yapı kullanmıyorsunuz emin değilim, ama bu durumda işe yarıyor.


a) zarif ayracı genişleme karşılaştırmak Çok fazla çizgi gürültüsü () b) OP'ın sorunu çözmek yok: onlar değiştirmek istiyor c/x.xile evenmore/y.yorijinal yol öneki tutarak.
Joseph R.

İkinci yorumunuz, düzeltmek için basit bir düzenleme gerektiren basit bir ihmaldi. Bu cevabın nasıl bir aşağı oyu hak ettiğini anlamıyorum. Düzenleme (tekniklik) ile sorunu çözer ve yolun herhangi bir bölümünü değiştirmeye izin verdiği için daha geneldir (genellikle benzer bir şey kullandım $PWD). Elbette, belki de en zarif değil, ancak kabuğun bazı kullanıcıların araştırma için yararlı bulabileceği metinsel ikamelere ve kelime belirleyicilere sahip olduğuna işaret ediyor.
Wojtek

TAMAM. Ben düzeltilmiş duruyorum.
Joseph R.
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.