Bagaimana cara memindahkan banyak file sekaligus ke direktori tujuan tertentu?

152

Saya mendapat banyak file di beberapa direktori (bersama dengan banyak file lainnya) yang ingin saya pindahkan.

Untungnya, semua file yang ingin saya pindahkan berisi pengidentifikasi tertentu dalam namanya, jadi saya bisa ls | grep IDENTIFIERmendapatkan daftar file yang tepat untuk dipindahkan.

Tapi, bagaimana saya bisa mengeksekusi mv file /path/to/dest/folder/sekaligus, dan tidak satu per satu (ada banyak file untuk dipindahkan)?

gilad hoch
sumber

Jawaban:

100

Jika Anda ingin pindah ABC-IDENTIFIER-XYZ.extatau IDENTIFIER-XYZ.xml, Anda dapat menggunakan:

mv *IDENTIFIER* ~/YourPath/

*adalah wildcard untuk nol atau lebih karakter , ini berarti nol atau lebih karakter , diikuti oleh IDENTIFIER, diikuti oleh nol atau lebih karakter .

Ini akan memindahkan semua file yang berisi yang IDENTIFIERAnda tentukan.

Evandro Silva
sumber
201

Anda bisa menggunakannya

mv -t DESTINATION file1 file2 file3

dan

mv -t DESTINATION `ls|grep IDENTIFIER`

berfungsi, tapi saya tidak yakin apakah mv dipanggil beberapa kali atau tidak karena grep akan menampilkan baris baru untuk setiap pertandingan.

tuomaz
sumber
5
berfungsi di linux, tidak yakin apakah itu akan berfungsi di mac
Alexander Mills
3
bekerja pada mac dan git bash via git untuk windwows.
Brandt Solovij
11
Tidak berfungsi di Mac (10.11.16 El Capitan). Tapi Anda cukup meletakkan folder target di belakang, yaitumv file1 file2 ... destination
Sheljohn
2
-1 untuk pendekatan kedua karena akan jatuh untuk file termasuk baris baru
αғsнιη
24

Anda dapat menggunakan wildcard .

Contoh: Untuk memindahkan semua file yang berekstensi .doc

mv *.doc /path/to/dest/folder/

Ini akan memindahkan semua file doc di bawah direktori saat ini ke tujuan tertentu.

Sunting

Untuk menjawab komentar.

mv *.ext *.xml *.txt /path/to/dest/folder/

Achu
sumber
2
tetapi daftar file yang akan dipindahkan tidak ditentukan oleh ekstensi. beberapa file diberi nama: ABC-IDENTIFIER-XYZ.extdan beberapa hanya IDENTIFIER-XYZ.extsemua memiliki ekstensi yang berbeda, sebagian besar xmlatau properties.
gilad hoch
@giladhoch Bagaimana dengan yang diedit?
Achu
@ gliadhoch Jika Anda merasa nyaman menggunakan grep, Anda dapat melihat jawaban saya di atas / di bawah.
Menyalakan
tidak akan berfungsi karena ada .xmlfile lain (misalnya) saya tidak ingin pindah.
gilad hoch
20

Jika Anda ingin memindahkan satu set file yang tidak relevan (tidak ada pola umum dalam nama dan tipe) yang dapat Anda lakukan seperti yang dikatakan Tn. Rajanand: pertama buka direktori yang berisi file yang ingin Anda pindahkan

mv file1.ext1 file2.ext2 file3.ext3.. /destination/

Jika file tersebar di direktori yang berbeda, Anda hanya perlu menentukan path untuk setiap file dalam perintah move

Ismail AL-taharwa
sumber
10

Saya menggunakan teknik tuomaz, tetapi sedikit dimodifikasi:

mv file1 file2 file3 -t DESTINATION

Saya menemukan ini lebih mudah untuk diingat dan lebih sulit untuk dikacaukan karena menggunakan urutan yang sama seperti operasi vanilla mv:

mv file1 DESTINATION
Blake Frederick
sumber
Halaman manual untuk mvtidak menyebutkan -topsi.
Noumenon
2
linux.die.net/man/1/mv ya itu
geoyws
7

Gunakan perintah ini:

mv `ls|grep IDENTIFIER` /path/to/dest/folder  

Namun, ls tidak dianjurkan untuk penggunaan seperti ini. Gunakan perintah find saja.

menyalakan
sumber
8
lstidak disarankan untuk penggunaan seperti ini. Jika Anda ingin membuat daftar file, terutama di grepbelakang, gunakan find . -name \*IDENTIFIER\*.
NorTicUs
Jawaban ini hanya untuk menunjukkan bagaimana Anda dapat menggunakan output dari perintah sebelumnya di mv. Karena ls | grep disebutkan dalam pertanyaan, saya hanya menyalinnya.
Menyalakan
3
Seperti yang dinyatakan oleh @NorTicUs, penggunaan ls tidak disarankan. Selain itu, file dengan spasi dapat menyebabkan masalah.
Paddy Landau
5

Jika Anda memiliki begitu banyak file untuk dipindahkan, Anda sebenarnya dapat memiliki terlalu banyak untuk mvperintah (atau perintah lain seperti rm). Saya sarankan menggunakan xargsuntuk memindahkan setiap file secara individual dalam satu lingkaran seperti mode. Salah satu cara untuk menyiasatinya adalah dengan melakukan:

ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/

The ls -1(minus satu) memastikan bahwa hanya ada satu nama file pada setiap baris. Jika Anda memiliki alias tersembunyi untuk lsperintah, Anda dapat memiliki beberapa nama file pada satu baris dan secara tidak sengaja memindahkan file yang tidak ingin Anda pindahkan.

AggieBill
sumber
Ini juga berguna ketika IDENTIFIER Anda tidak mudah diubah menjadi wildcard, atau Anda ingin menggunakan grep dengan regex yang lebih kompleks.
AggieBill
1
+1 untuk xargs. temukan hampir selalu lebih baik dan lebih aman daripada ls. Temukan . IDENTIFIER -exec mv {} / path / ke / dest / folder \; (kode yang belum diuji). adalah untuk direktori kerja saat ini. The \; adalah mengakhiri perintah yang akan dieksekusi. Bergantung pada apa yang Anda lakukan, Anda mungkin harus menambahkan -maxdepth 1 agar tidak berulang ke subdirektori.
Joe
5

Jika file-file tersebut dalam dir yang sama dapat Anda gunakan

mv /path/to/source/dir/{file1,file2,*.ext1,*.ext2} /path/to/destination/

(diuji di Ubuntu 16.04)

Sruli
sumber
1
Ini tidak benar-benar menambahkan sesuatu ke jawaban yang ada, bukan begitu?
hidangan penutup
1
hanya menghilangkan kebutuhan untuk menentukan path lengkap untuk dir untuk setiap file
Sruli
3
find -type f -name "[range]" -exec mv {} target-directory ';'

perintah ini akan memindahkan nama file dengan pola / rentang apa pun ke direktori target.

misalnya.

find -type f -name "file[1-50000]" -exec mv {} target-directory ';'

itu akan memindahkan file dengan nama seperti file1, file2... file50000ke target-directory.

pengguna734124
sumber
2

Anda dapat menggunakan output dari ls untuk diinput ke dalam mv commnad

mv $(ls | grep IDENTIFIER) /path/to/dest/dir

Perintah antara $()mengembalikan daftar nama file yang cocok dengan pencarian Anda, dan itu dapat diberikan sebagai parameter untuk perintah mv.

Fuad Saud
sumber
1

Dengan menggunakan perintah ini, Anda dapat memindahkan banyak file.

mv SourceFilenames ~DestinationPath

Rajanand
sumber
1

Cara termudah adalah seperti ini

mv {file1,file2,file3} DESTINATION

atau direktori

mv {directory1,directory2,directory3} DESTINATION

atau kedua file dan direktori

mv {file1,file2,file3,directory1,directory2,directory3} DESTINATION

Semoga ini membantu

Sabrina
sumber