Klasör içeriğini bir seviye yukarı taşı


127

Açılmış, ancak bir klasörde bulunan bir dizini var. İçeriği bir seviye nasıl yukarı taşıyabilirim? CentOS'a SSH ile erişiyorum.

Yanıtlar:


189

'Myfolder' adı verilen klasör ve dosya hiyerarşisinde bir seviye üste (koymak istediğiniz nokta) komut aşağıdaki gibi olacaktır:

mv myfolder/* .

Yani, örneğin veri olsaydı /home/myuser/myfolderden sonra /home/myuser/komutunu çalıştırın.


35
Ayrıca arşiv .*sadece *nokta dosyaları içeriyorsa da eşleşmeniz gerekebilir . Ayrıca şimdi harici klasörü kaldırmak için sonuna & & rmdir myfolder `ı ekleyin. Bu, yalnızca mv başarılı olursa döner ve Rmdir boş olmayan bir dizini kaldırmadığı için çalışacağından dolayı tasarruftur.
Caleb

İyi nokta .*. Orijinal klasörü kaldırmak hem önemsizdir hem de istenmez, bu yüzden OP'nin kendisiyle başa çıkmasına izin vereceğiz.
Rudu

1
@Caleb hem yazmak mümkündür *ve .*tek satırda? sadece merak
Richard

2
@Richard Evet, öyle. Argümanların mvtümü, taşınması için hedef olması gereken LAST argümanı dışındaki kaynaklar olacaktır (ve birden fazla kaynak olması durumunda, bir klasör olması gerekir).
Caleb

1
Ben bash alıyorum:/bin/mv: Argument list too long
dragosrsupercool

26

Sadece bunu netleştirmek için, Rudu'nun yukarıdaki cevabından ve yorumlarından alınmıştır.

Tüm içeriği taşımanız gerekirse, a ile başlayan dosyaları DAHİL. (.htaccess, .git, vb gibi) komutunuza hem * hem de * eklemeniz gerekir. Bunun gibi:

 mv subfolder/* subfolder/.* .

Bu alt klasörün içeriğini geçerli klasörünüze taşıyacaktır. Son "." Den önceki boşluğu not edin.


işe yarıyor ama alıyorum mv: rename fake/. to ./.: Invalid argumentvemv: rename fake/.. to ./..: Invalid argument
Maslow

16

Bu, aşağıdaki yöntemlerle mümkündür:

  • Kullanarak rsync:

    rsync -vua --delete-after foo/ .
  • Kullanılması cpve rmdir:

    cp -vaR foo/. . && rmdir foo/
  • Kullanarak mv( dotglobseçenek etkinken):

    shopt -s dotglob # Includes filenames beginning with a dot.
    mv -- foo/* .    # Where foo/ is the folder consisting the files.
    shopt -u dotglob # Disables previously enabled dotglob option.
    

    foo/İçeriği bir seviye yukarı taşınacak klasörün nerede ?

    Bakınız: help shoptve man bash.

  • Kullanarak mv( burada önerildiği gibi ):

    mv foo/* foo/.[^.]* . && rmdir foo/

    Not: adlı bir dosyayı özleyecektir foo/..bar...

    Not: POSIX mermileri için ihtiyacınız vardır [!.].


Rsync anahtarları Ne edilir -v, -u, -ave -ryapıyor? AFAICT, -vsadece rsync daha fazla bilgi yazdırmak yapar, ayrıntılı. -ugüncelleme anlamına gelir - bir dosyayı yalnızca yeniyse kopyalayın. Bu alakalı görünmüyor. -aarşiv anlamına gelir. Bu dosyanın sahibini ve izinlerini kopyalar ve senkronizasyonu özyinelemeye getirir. -rözyinelemeli anlamına gelir, ancak bu zaten tarafından kaplı -a.
rjmunro

-uZaten var olan (özellikle yavaş depolama aygıtları için) fazladan veri taşımak için zaman harcamak istemiyorsanız faydalıdır. Söylediğim gibi -rkaplandığı için kaldırdım -a.
kenorb

1
mv foo/* foo/.[^.]* .foo/..bar..örneğin bir dosyayı özleyecekti . POSIX mermileri için ihtiyacınız olduğunu unutmayın [!.].
Stéphane Chazelas

rsync -vua --delete-after foo/ .Geçerli dizinde zaten var olabilecek her şeyi sildiği belirtilmelidir .
David

7

sadece bir mv komutu verin

mv (directory)/* .

dizini silmek istiyorsanız ekleyin.

rm -rf (directory)

(Dizinin) üst dizininde olduğunuzu varsayalım

Eğer (dizin) içerisindeyseniz, o zaman

mv * ../

13
Ek güvenlik ipucu: Bildiğiniz bir dizini silerken boş rmdirolması, dizinin boş olmaması durumunda şikayet eder ve çıkar rm -r. (Bu bir poka-boyunduruğu değildir .)
Anko

Harika nokta! Bu şekilde yapmamak için bir sebep düşünemiyorum.
Mark Lalor

@MarkLalor Bir neden, macOS'ta her yerde .DS_storeolduğu gibi gizli dosyaların varlığı olabilir . Yukarıdaki mvkomut bunları ( dotglobayarlanmamış) hareket ettirmez .
AkselA

0

paylaşılan bir sunucudakiler için bu şekilde bir şeyler kullanmak zorunda kalacaksınız.

Dosyaları taşımak için

mv -v ~/public_html/public_html/* ~/public_html/

Dosyaları kopyalamak için

cp -a ~/public_html/public_html/* ~/public_html/


2
Yukarıdaki soru, içeriğin kopyalanmamasını işaret ediyor. Bu, orijinalleri bir alt klasörde bırakarak dosyaları kopyalar. Ayrıca "paylaşılan" bir sunucu olmak ya da gerçekten bununla ilgisi yok.
Caleb

1
hakkınız ve işte bunun cevabı ...
Ricardo Havoc

2
Düzenlemenizi yeniden düzenleyin: Zaten yükseltilmiş olan yanıttan ne farklı biri ? Ve "paylaşılan bir sunucunun" bununla ne alakası var? Lütfen düzenlemek bu zaten burada ne değer katan faydalı katkılar edecekse bu öğeleri açıklamak.
Caleb,

1
Paylaşılan sunucunun, bununla ilgisi olmadığı konusunda hemfikir değilim. "Dir" ye girme şekli fark yaratan bir dünya yaratıyor ..
Ricardo Havoc

1
neden bu kadar kızgınsın dostum? ... vay .. sadece biraz bilgiyi paylaşıyordum. Hepimiz farklı bir anlayışa sahibiz ve farklı teknik problemlerle farklı olarak karşılaşıyoruz ... Kendine iyi günler Caleb ..
Ricardo Havoc
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.