回答:
OS Xの場合:
ls file_* | xargs -J {} mv {} temp/
Linuxの場合:
ls file_* | xargs -i {} mv {} temp/
/
最後のオプションはオプションです。必要に応じて含めることができますが、必須ではありません。
-i
または-J
)トークンを指定します。トークンは単に最後に追加されるのではなく、着信引数に置き換えられます。man xargs
-i{}
。または言う-I {}
。
-i
、それは置き換えられています。ls file_* | xargs -iFOO mv FOO temp/
まったく同じように動作します。
find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;
find
ls
シェルで許可されているプログラム引数の数よりも多くのファイルがある場所よりも優れています。
file_*
、現在のディレクトリ内のファイルのみを処理したいという要望を示唆している一方で、find
(追加オプションなしで)現在のディレクトリの下のディレクトリツリー全体を検索することに注意してください。
mv
ファイルを一緒に処理するか個別に処理するかは関係ありませんが、他の使用方法もあります。
@ user1953864で示唆されているように、{ -i
、-J
}は、入力引数に置き換えられるトークンを指定します。
例ls
:
something.java exampleModel.java NewsQueryImpl.java readme someDirectory/
次に、すべてのJavaファイルをsomeDirectoryフォルダーに移動xargs
するには、次のようにします。
Linuxの場合
ls *.java | xargs -i mv {} someDirectory/
MacOSで
ls *.java | xargs -J mv {} someDirectory
別の解決策は次のとおりです。
for f in file_* ; do
mv $f temp/$f
done
欠点は、mv
ファイルごとに新しいプロセスをフォークすることです。
xargs -n10
例)