1つは、-i
スイッチが非推奨になったことです。
-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.
だから私はこれにあなたのコマンドを変えたとき、それは働いた:
$ find /foo/bar -name '*.mp4' -print0 | xargs -I{} -0 mv -t /some/path {}
例
$ 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
...
の使用 -I{}
このアプローチは、次のコマンド構成を実行するため使用しないでください。
$ find -print0 ... | xargs -I{} -0 ...
暗黙的にこれらのスイッチをオンにしxargs
、-x
そして-L 1
。-L 1
設定しxargs
、それはあなたがそれを単一の方法でを介してファイルを実行したいコマンドを呼び出していることになります。
したがって、xargs
1000個のファイルを指定すると、mv
コマンドが1000回実行されるため、ここで使用する目的に反します。
それでは、どのアプローチを使用する必要がありますか?
次のようなxargsを使用して実行できます。
$ find /foot/bar/ -name '*.mp4' -print0 | xargs -0 mv -t /some/path
または、すべてを実行してください:
$ find /foot/bar/ -name '*.mp4' -exec mv -t /some/path {} +
"This approach shouldn't be used"
代わりにどちらのアプローチを使用すべきかと言ったときは?う"find /foot/bar/ -name '*.csv' -print0 | xargs -0 mv -t some_dir'"
、より良い解決策になりますか?もしそうなら、この場合、パイプから取得した引数を入力するコマンドのどこをどのようにxargs
知っていmv
ますか?(常に最後に配置しますか?)