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.