Saya mencoba ini dan tidak berfungsi:
ls file_* | xargs mv {} temp/
Ada ide?
Saya mencoba ini dan tidak berfungsi:
ls file_* | xargs mv {} temp/
Ada ide?
Jawaban:
Di OS X:
ls file_* | xargs -J {} mv {} temp/
Di Linux:
ls file_* | xargs -i {} mv {} temp/
/
pada akhirnya adalah opsional. Anda dapat memasukkannya jika Anda mau, tetapi itu tidak perlu.
-i
(atau -J
) tentukan token yang akan diganti dengan argumen yang masuk, alih-alih hanya ditempel di bagian akhir. man xargs
-i{}
, tanpa spasi. Atau katakan -I {}
.
-i
, ia akan diganti. ls file_* | xargs -iFOO mv FOO temp/
bekerja persis sama.
find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;
find
lebih baik daripada di ls
mana mungkin ada lebih banyak file daripada jumlah argumen program yang diizinkan oleh shell Anda.
file_*
file dalam direktori saat ini, sementara find
(tanpa opsi tambahan) akan mencari seluruh pohon direktori di bawah direktori saat ini.
mv
tidak peduli jika Anda memproses file bersama atau secara individual, beberapa kegunaan lain mungkin.
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 xargs
akan sebagai berikut:
Di Linux
ls *.java | xargs -i mv {} someDirectory/
Di MacOS
ls *.java | xargs -J mv {} someDirectory
Solusi lain mungkin:
for f in file_* ; do
mv $f temp/$f
done
Kerugiannya adalah melakukan mv
proses baru untuk setiap file.
xargs -n10
misalnya)