Ketika saya menjalankan perintah berikut:
> mkdir some_dir
> find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} some_dir
Saya mendapatkan ratusan baris yang mengatakan:
mv: target `/foo/bar/XX.csv` is not a directory
Mengapa? Saya pikir xargs akan menjalankan:
mv /foo/barXX.csv some_dir
untuk setiap file yang find
ditemukan. Apa yang sedang terjadi? By the way, ini dengan zsh
Memperbarui:
Pembaruan1:
Saya mencoba:
find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} -t some_dir
tapi kemudian saya mendapat beberapa baris seperti:
mv: cannot stat `{}': No such file or directory
meskipun saya pikir perintah ini memindahkan file saya dengan benar.
Pembaruan2:
Saya sepertinya tidak membutuhkan -t
opsi saat menggunakan mv
sendiri. Sebagai contoh
> touch file1.txt
> touch file2.txt
> mkdir my_dir
> mv file1.txt file2.txt my_dir
bekerja dengan baik. Mengapa saya perlu -t
saat menggunakan xargs
?
mv -t some_dir 1.csv 2.csv 3.csv ...
argumen file yang terakhir. Itulah kesalahan dalam pertanyaan, untuk menggunakan{}
Anda harus melewati-I {}
untukxargs
.-t
dengan banyak file dan direktori dengan yang biasamv
?mv -t
.Anda juga dapat menggunakan perintah ls alih-alih mencari perintah:
sumber