Saya ingin menemukan beberapa file dan kemudian memindahkannya.
Saya dapat menemukan file dengan:
$ find /tmp/ -ctime -1 -name x*
Saya mencoba memindahkannya ke ~/play
direktori saya dengan:
$ find /tmp/ -ctime -1 -name x* | xargs mv ~/play/
tapi itu tidak berhasil. Jelas saya membutuhkan dua argumen.
Tidak yakin apakah (atau bagaimana) untuk merujuk 'item terkini' xargs di perintah mv?
-I
:find . | xargs -I'{}' mv '{}' ~/play/
, tapi sebagai manusia mengatakan, bahwa “menyiratkan-x
dan-L 1
.” Jadi tidak ada keuntungan. Lebih baik tetap sederhana dan gunakanfind . -exec mv '{}' ~/play/ \;
Jawaban:
Lihatlah jawaban Stephane untuk metode terbaik, lihat jawaban saya untuk alasan tidak menggunakan solusi yang lebih jelas (dan alasan mengapa mereka bukan yang paling efisien).
Anda dapat menggunakan
-I
opsixargs
:Yang bekerja dalam mekanisme serupa dengan
find
dan{}
. Saya juga akan mengutip-name
argumen Anda (karena file yang dimulai denganx
dalam direktori sekarang akan di-globed file dan diteruskan sebagai argumen untuk menemukan - yang tidak akan memberikan perilaku yang diharapkan!).Namun, sebagaimana ditunjukkan oleh manatwork, sebagaimana dirinci dalam
xargs
halaman manual:Yang penting untuk dicatat adalah itu
-L 1
berarti hanya satu jalur output dari yangfind
akan diproses pada satu waktu. Ini artinya secara sintaksis sama dengan:(yang menjalankan satu
mv
operasi untuk setiap file).Bahkan menggunakan
-0
argumen xargs GNU danfind -print0
argumen tersebut menyebabkan perilaku yang persis sama-I
- ini adalahclone()
proses untuk setiap filemv
:sumber
Dengan alat GNU:
Opsi
-t
(--target
) spesifik untuk GNU.-print0
,-r
,-0
, Sementara non-standar dan berasal GNU juga ditemukan di beberapa implementasi lain seperti pada beberapa BSD.POSIXly:
Keduanya menjalankan
mv
perintah sesedikit mungkin dan bekerja dengan karakter apa pun yang mungkin berisi nama file. GNU yang mungkin memiliki keunggulan yangfind
terus mencari file sambilmv
mulai memindahkan batch pertama.Waspadalah bahwa semua file dan direktori akan berakhir dalam satu direktori, waspadalah terhadap bentrokan jika beberapa file di direktori yang berbeda memiliki nama yang sama.
sumber
mv
sekali untuk semua argumen (atau untuk semua-L
atau-n
, jika disediakan). Jika tidak, panggilanmv
untuk setiap file akan menjadi cepat (dan lambat).Mungkin perintah ini mungkin sekarang dan tidak kembali pada tahun 2013, tetapi ini berfungsi dengan baik untuk saya:
The
-t
menempatkan kunci folder tujuan pertama, membebaskanmv
perintah untuk memiliki semua argumen terakhir sebagai hanya file yang akan dipindahkan.sumber
Anda dapat mencoba dengan perintah di bawah ini dan diuji dan bekerja dengan baik
sumber