Bir şey için -i
anahtarın kullanımdan kaldırılmış olması:
-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.
Öyleyse emrinizi bu yönde değiştirdiğimde işe yaradı:
$ find /foo/bar -name '*.mp4' -print0 | xargs -I{} -0 mv -t /some/path {}
Örnek
$ 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
...
Kullanımı -I{}
Bu komut, bu komut yapısını çalıştırdığından beri kullanılmamalıdır:
$ find -print0 ... | xargs -I{} -0 ...
örtülü bu anahtarlar açar xargs
, -x
ve -L 1
. -L 1
Yapılandırır xargs
o komutları aradığını böylece tek bir moda üzerinden dosya çalıştırmak istiyorum.
Bu yüzden xargs
burada kullanım amacını yitirir çünkü 1000 dosya verirseniz mv
komutu 1000 defa çalıştırır .
Öyleyse hangi yaklaşımı kullanmalıyım?
Böyle xargs kullanarak yapabilirsiniz:
$ find /foot/bar/ -name '*.mp4' -print0 | xargs -0 mv -t /some/path
Ya da hepsini bulduktan sonra:
$ find /foot/bar/ -name '*.mp4' -exec mv -t /some/path {} +
"This approach shouldn't be used"
Bunun yerine hangi yaklaşımın kullanılması gerektiğini söylemiştiniz ? Daha"find /foot/bar/ -name '*.csv' -print0 | xargs -0 mv -t some_dir'"
iyi bir çözüm olabilir mi? Eğer öyleyse, nasıl gelmezxargs
bu durumda biliyorummv
o borusundan alır argümanlar içinde beslemesine komuta? (Her zaman onları en sona yerleştirir mi?)