Pindahkan konten folder ke atas satu tingkat


127

Saya memiliki direktori yang dibongkar, tetapi ada di folder. Bagaimana saya bisa memindahkan konten naik satu tingkat? Saya mengakses CentOS melalui SSH.

Jawaban:


189

Dengan folder bernama 'myfolder' dan naik satu tingkat dalam hirarki file (titik yang Anda inginkan) perintahnya adalah:

mv myfolder/* .

Jadi misalnya jika data sudah di /home/myuser/myfoldermaka dari /home/myuser/jalankan perintah.


35
Anda mungkin perlu mencocokkan juga .*tidak hanya *jika arsip berisi dot-file. Juga tambahkan `&& rmdir myfolder` ke akhir untuk menghapus folder yang sekarang tidak ada. Ini disimpan karena hanya akan berjalan jika mv kembali sukses DAN karena rmdir tidak akan menghapus direktori yang tidak kosong.
Caleb

Poin bagus di .*. Menghapus folder asli itu sepele dan tidak diminta, jadi kami akan membiarkan OP berurusan dengan itu sendiri.
Rudu

1
@ Caleb apakah mungkin untuk menulis keduanya *dan .*dalam satu baris? hanya ingin tahu
Richard

2
@ Richard Ya, benar. Argumen untuk mvsemua akan menjadi sumber kecuali argumen TERAKHIR yang perlu menjadi target untuk memindahkan (dan dalam kasus beberapa sumber, perlu folder).
Caleb

1
Saya mendapatkan bash:/bin/mv: Argument list too long
dragosrsupercool

26

Hanya untuk membuatnya jelas, diambil dari jawaban Rudu di atas, dan komentar.

Jika Anda perlu memindahkan semua konten, TERMASUK file yang dimulai dengan a. (seperti .htaccess, .git, dll), Anda harus memasukkan * dan. * dalam perintah Anda. Seperti itu:

 mv subfolder/* subfolder/.* .

Itu akan memindahkan konten subfolder ke folder Anda saat ini. Perhatikan spasi sebelum "." Yang terakhir.


itu berhasil tetapi saya dapatkan mv: rename fake/. to ./.: Invalid argumentdanmv: rename fake/.. to ./..: Invalid argument
Maslow

16

Ini dimungkinkan dengan metode berikut:

  • Menggunakan rsync:

    rsync -vua --delete-after foo/ .
  • Menggunakan cpdan rmdir:

    cp -vaR foo/. . && rmdir foo/
  • Menggunakan mv(dengan dotglobopsi diaktifkan):

    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.

    di mana foo/folder Anda yang isinya dipindahkan satu tingkat ke atas.

    Lihat: help shoptdan man bash.

  • Menggunakan mv(seperti yang disarankan di sini ):

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

    Catatan: Ini akan melewatkan file yang disebut foo/..bar...

    Catatan: Untuk kerang POSIX, Anda perlu [!.].


Apa yang switch rsync -v, -u, -adan -rlakukan? AFAICT, -vadalah verbose, yang hanya membuat rsync mencetak informasi lebih lanjut. -uberarti pembaruan - hanya menyalin file jika itu lebih baru. Itu sepertinya tidak relevan. -aberarti arsip. Itu akan menyalin pemilik dan izin file, dan membuat sinkronisasi rekursif. -rberarti rekursif, tapi itu sudah dicakup oleh -a.
rjmunro

-uberguna ketika Anda tidak ingin menghabiskan waktu ekstra untuk memindahkan data yang sudah ada (terutama untuk perangkat penyimpanan lambat). Saya sudah dihapus -r, karena dicakup oleh -aseperti yang Anda sebutkan.
kenorb

1
mv foo/* foo/.[^.]* .akan melewatkan file yang dipanggil foo/..bar..misalnya. Perhatikan bahwa untuk kerang POSIX, Anda perlu [!.].
Stéphane Chazelas

Harus disebutkan, yang rsync -vua --delete-after foo/ .menghapus semua yang mungkin sudah ada di direktori saat ini.
David

7

cukup keluarkan perintah mv

mv (directory)/* .

jika Anda ingin menghapus direktori maka tambahkan

rm -rf (directory)

Diasumsikan bahwa Anda berada di direktori induk dari (direktori)

Jika Anda berada di dalam (direktori) itu

mv * ../

13
Kiat keamanan tambahan: Saat menghapus direktori yang Anda tahu harus kosong, rmdirmengeluh dan keluar jika direktori tidak kosong, sementara rm -rsebaliknya hanya akan menghapusnya dan semua isinya. (Ini adalah poka-kuk .)
Anko

Poin yang bagus! Saya tidak bisa memikirkan alasan untuk tidak melakukannya dengan cara itu.
Mark Lalor

@MarkLalor Salah satu alasannya mungkin keberadaan file tersembunyi, seperti di mana-mana .DS_storedi macOS. The mvperintah di atas tidak akan memindahkan (tanpa dotglobset).
AkselA

0

bagi Anda di server bersama Anda harus menggunakan sesuatu seperti ini

Untuk memindahkan file

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

Untuk menyalin file

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


2
Pertanyaan di atas menanyakan tentang pindah bukan menyalin konten. Ini akan menduplikasi file dengan meninggalkan aslinya dalam subfolder. Juga menjadi server "bersama" atau tidak benar-benar tidak ada hubungannya dengan ini.
Caleb

1
kanan dan inilah jawabannya ...
Ricardo Havoc

2
Re edit Anda: apa bedanya dengan jawaban yang sudah diunggah ? Dan apa yang harus dilakukan oleh "server bersama"? Harap edit untuk menjelaskan item-item ini jika ini akan menjadi kontribusi yang bermanfaat yang menambah nilai pada apa yang sudah ada di sini.
Caleb

1
Saya tidak setuju tentang server bersama yang tidak ada hubungannya dengan itu. Cara "dir" dimasukkan membuat dunia menjadi berbeda ..
Ricardo Havoc

1
Bung kenapa kamu begitu marah? ... wow .. aku baru saja berbagi sedikit ilmu. Kita semua mengerti secara berbeda dan menghadapi masalah teknis yang berbeda secara berbeda ... Semoga hari Anda menyenangkan Caleb ..
Ricardo Havoc
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.