Bagaimana saya bisa memindahkan file dengan xarg di Linux?


Jawaban:


31

Di OS X:

ls file_* | xargs -J {} mv {} temp/

Di Linux:

ls file_* | xargs -i {} mv {} temp/

1
Di Linux, setidaknya, /pada akhirnya adalah opsional. Anda dapat memasukkannya jika Anda mau, tetapi itu tidak perlu.
Scott

4
@ user1953864: -i(atau -J) tentukan token yang akan diganti dengan argumen yang masuk, alih-alih hanya ditempel di bagian akhir. man xargs
Amadan

14
Anda mungkin perlu mengatakan -i{}, tanpa spasi. Atau katakan -I {}.
Scott

1
Saya perhatikan bahwa menggunakan "%" sebagai pengganti "{}" juga berfungsi - apa arti% dan apa {} artinya? Contoh: ls file_ * | xargs -I% mv% temp /
dmonopoly

3
@monopoli: Mereka tidak berarti apa - apa. Apa pun parameternya -i, ia akan diganti. ls file_* | xargs -iFOO mv FOO temp/bekerja persis sama.
Amadan

8

find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;

findlebih baik daripada di lsmana mungkin ada lebih banyak file daripada jumlah argumen program yang diizinkan oleh shell Anda.


2
Perhatikan bahwa pertanyaan menyarankan keinginan untuk hanya memproses file_*file dalam direktori saat ini, sementara find(tanpa opsi tambahan) akan mencari seluruh pohon direktori di bawah direktori saat ini.
Scott

1
Ya benar. Tambahkan -maxdepth 0untuk mencegah ini.

"lebih baik" adalah subyektif. Lebih kuat, lebih kompleks, dan lebih lambat; dan sementara mvtidak peduli jika Anda memproses file bersama atau secara individual, beberapa kegunaan lain mungkin.
Amadan

Diedit (ditambahkan -maxdepth 0)

8

Gunakan -t "tentukan target directoty" di mv, ini seharusnya berfungsi memindahkan file * ke direktori tujuan / temp

mis: - #ls -l file * | xargs mv -t / temp


4

Seperti yang disarankan oleh @ user1953864: { -i, -J} tentukan token yang akan diganti dengan argumen yang masuk.

Sebagai contoh ls:

something.java  exampleModel.java  NewsQueryImpl.java  readme someDirectory/

Kemudian untuk memindahkan semua file java ke folder someDirectory dengan xargsakan sebagai berikut:

Di Linux

ls *.java | xargs -i mv {} someDirectory/

Di MacOS

ls *.java | xargs -J mv {} someDirectory

0

Solusi lain mungkin:

 for f in file_* ; do
   mv $f temp/$f
 done

Kerugiannya adalah melakukan mvproses baru untuk setiap file.

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.