Nah untuk satu hal -i
saklar sudah usang:
-i[replace-str]
This option is a synonym for -Ireplace-str if replace-str is specified.
If the replace-str argument is missing, the effect is the same as -I{}.
This option is deprecated; use -I instead.
Jadi ketika saya mengubah perintah Anda, ini berhasil:
$ find /foo/bar -name '*.mp4' -print0 | xargs -I{} -0 mv -t /some/path {}
Contoh
$ find . -print0 | xargs -I{} -0 echo {}
.
./.sshmenu
./The GIT version control system.html
./.vim_SO
./.vim_SO/README.txt
./.vim_SO/.git
./.vim_SO/.git/objects
./.vim_SO/.git/objects/pack
./.vim_SO/.git/objects/pack/pack-42dbf7fe4a9b431a51da817ebf58cf69f5b7117b.idx
./.vim_SO/.git/objects/pack/pack-42dbf7fe4a9b431a51da817ebf58cf69f5b7117b.pack
./.vim_SO/.git/objects/info
./.vim_SO/.git/refs
./.vim_SO/.git/refs/tags
...
Penggunaan -I{}
Pendekatan ini tidak boleh digunakan sejak menjalankan perintah ini:
$ find -print0 ... | xargs -I{} -0 ...
secara implisit menyalakan sakelar ini ke xargs
, -x
dan -L 1
. The -L 1
mengkonfigurasi xargs
sehingga memanggil perintah yang Anda inginkan untuk menjalankan file melalui secara tunggal.
Jadi ini mengalahkan tujuan penggunaan di xargs
sini karena jika Anda memberikannya 1000 file maka akan menjalankan mv
perintah 1000 kali.
Jadi pendekatan mana yang harus saya gunakan?
Anda dapat melakukannya menggunakan xargs seperti ini:
$ find /foot/bar/ -name '*.mp4' -print0 | xargs -0 mv -t /some/path
Atau temukan saja semuanya:
$ find /foot/bar/ -name '*.mp4' -exec mv -t /some/path {} +
"This approach shouldn't be used"
pendekatan mana yang harus digunakan, bukan? Apakah"find /foot/bar/ -name '*.csv' -print0 | xargs -0 mv -t some_dir'"
akan menjadi solusi yang lebih baik? Jika demikian, bagaimana bisaxargs
tahu dalam kasus ini di mana dalammv
perintah untuk memberi makan dalam argumen yang didapatnya dari pipa? (Apakah itu selalu menempatkan mereka sebagai yang terakhir?)