Bagaimana cara memindahkan file dan direktori ke folder induk di Linux?

Jawaban:

66
Temukan . -maxdepth 1 -exec mv {} .. \;

ini juga akan memindahkan file tersembunyi.

Anda akan mendapatkan pesan:

mv: tidak bisa bergerak `. ' to `../. ': Perangkat atau sumber daya sibuk

ketika mencoba untuk pindah .(direktori saat ini) tetapi itu tidak akan menyebabkan kerusakan.

John T
sumber
1
Ini akan memindahkan semua file dari semua subdirektori ke induk dari direktori saat ini juga. Saya ingin -maxdepth 1memastikan.
ℝaphink
1
Sekarang dikatakan: mv: tidak bisa bergerak ./scripts' to ../scripts ': Direktori tidak kosong
1
Anda harus memiliki direktori yang disebut skrip di direktori induk Anda DAN di direktori Anda saat ini. Anda harus mengganti nama yang ini sebelum memindahkannya.
ℝaphink
1
Ini berhasil tetapi Anda meninggalkan satu informasi yang sangat penting - Anda harus menjalankannya dari subdirektori. Juga ini tidak akan menghapus subdirektori itu sendiri sehingga Anda harus membuat cadangan satu direktori dan melakukan rmdir pada subdirektori.
perajin
90

Saya datang ke sini karena saya juga baru dalam hal ini. Untuk beberapa alasan di atas tidak melakukan trik untuk saya. Apa yang saya lakukan untuk memindahkan semua file dari direktori ke direktori induknya adalah:

cd to/the/dir
mv * ../
Ben Fransen
sumber
12
Ini tidak memindahkan file tersembunyi
Wavesailor
1 liner:(cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
Dawid Drozd
10

Ketikkan ini di shell:

mv *.* ..

Itu memindahkan SEMUA file satu tingkat ke atas.

Karakternya *adalah wildcard. Jadi *.debakan memindahkan semua file .deb, dan Zeitgeist.*akan memindahkan Zeitgeist.avi dan Zeitgeist.srt satu folder ke atas, karena, tentu saja, ..menunjukkan direktori induk.

Untuk memindahkan semuanya termasuk folder, dll, gunakan saja *alih-alih*.*

Gil
sumber
3
ini tidak bekerja dengan dir! atau file yang tersembunyi
Ini berfungsi dengan dir, setidaknya untuk saya.
maaartinus
5
Anda ingin *tidak *.*memasukkan direktori
Chris S
Ini film dokumenter yang bagus
BlackBurn027
6

Tidak mungkin lebih sederhana dari:

mv * ../

Untuk juga memindahkan file tersembunyi:

mv /path/subfolder/{.,}* /path/ 

mvadalah perintah untuk memindahkan file, *berarti semua file dan folder dan ../merupakan jalur ke direktori induk.

William Edwards
sumber
2

Di bash Anda dapat menggunakan shopt -s dotglob untuk membuat * pertandingan semua file dan memindahkan mereka hanya dengan

shopt -s dotglob; mv * ..

Ini bukan solusi terbaik karena pengaturannya permanen untuk shell sampai Anda mengubahnya

shopt -u dotglob

tapi saya pikir itu baik untuk diketahui.

maaartinus
sumber
4
Sebut saja di subkulit: (shopt -s dotglob && mv * ..). Dengan begitu, opsi hanya lokal untuk subkulit itu.
Martin Ueding
Jawaban bagus - sederhana, termasuk file tersembunyi dan tidak menyebabkan kesalahan saat menyalin '.' dan '..'
Daniel Howard
1

Metode yang tidak menyebabkan kesalahan dan berfungsi setiap saat:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done
djhaskin987
sumber
1
find . -maxdepth 2 -type f -exec mv {} .. \;

Saya menggunakan variasi di atas untuk memindahkan semua file dari subfolder ke induk.

Saya mendapatkan data dalam folder per tahun, tetapi ditemukan dengan menggunakan metadata, saya dapat menyimpan semuanya di folder yang sama yang membuatnya lebih mudah untuk dikelola.

misalnya.

/data/2001/file_1
/data/2002/file_2
/data/2003/file_3
Bill Bixby
sumber
0

Dengan asumsi semua file tersembunyi Anda dimulai dengan titik diikuti dengan huruf atau angka (yang seharusnya), Anda dapat menggunakannya

mv * .[A-Za-z0-9]* ..

Bagian .[A-Za-z0-9]*ini untuk memastikan Anda tidak mencoba bergerak .atau ..mengikuti, yang akan gagal.

ℝaphink
sumber
0

Sangat mudah untuk memindahkan semua file dan folder ke direktori induk di Linux.

Buka folder itu dan gunakan perintah ini:

mv * /the full path

Misalnya, jika file dan folder Anda adalah sebagai berikut:

/home/abcuser/test/1.txt 
                   2.txt
                   3.jpg
                   4.php
                   1folder
                   2folder

Buka folder itu melalui cd:

cd /home/abcuser/test
mv * /home/abcuser

Semua file dan folder Anda akan dipindahkan ke folder abcuser (direktori induk).

Abhishek
sumber
2
Terima kasih @Gareth, hampir sama. Abhishek, tolong jangan memposting tautan yang tidak terkait, di mana artinya? Periksa juga format Anda. Selain itu, /the full pathtidak bekerja di Linux, Anda harus keluar dari ruang /the\ full\ path.
slhck
0

Tidak perlu mengubah direktori. Cukup sertakan * di ujung jalan:

mv /my/folder/child/* /my/folder/

Di atas hanya memindahkan file yang tidak tersembunyi. Untuk memindahkan hanya file yang tersembunyi gunakan. *

mv /my/folder/child/.* /my/folder/

Di atas dua dapat digabungkan menjadi satu perintah:

mv /my/folder/child/{.,}* /my/folder/

Lihat juga: Cara memindahkan semua file termasuk file tersembunyi ke direktori induk melalui *

Shital Shah
sumber
0
find -type f|while read line; do mv $line ${line##*/}; done
Adler
sumber
Terima kasih telah menyumbangkan jawaban. Meskipun ini mungkin bekerja dalam skenario sederhana, menyambungkan findke dalam while readadalah cara yang buruk untuk digunakan find, dan jawaban yang lebih baik telah diposting.
Scott
-1

beralih ke sub direktori dan jalankan perintah berikut untuk menyalin atau memindahkan file.

ex: a adalah direktori induk dan b adalah sub direktori, kami ingin memindahkan / menyalin semua file dari b ke (sub direktori ke direktori induk).

cd b
cp * ..
mv * ..
M. Ikram
sumber
Selamat Datang di Pengguna Super! Ini menggandakan jawaban lain dan tidak menambahkan konten baru. Tolong jangan memposting jawaban kecuali Anda benar-benar memiliki sesuatu yang baru untuk disumbangkan.
DavidPostill