web-dev-qa-db-ja.com

Linuxでxargsを使用してファイルを移動するにはどうすればよいですか?

私はこれを試していますが、うまくいきません:

ls file_* | xargs mv {} temp/

何か案は?

24
user1953864

OS Xの場合:

ls file_* | xargs -J {} mv {} temp/

Linuxの場合:

ls file_* | xargs -i {} mv {} temp/
31
Amadan

find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;

findlsよりも優れており、シェルで許可されているプログラム引数の数よりも多くのファイルがある場合があります。

8
David-SkyMesh

Mvで「ターゲットディレクトリを指定」するために使用されます。ファイル*を宛先ディレクトリ/ tempに移動する必要があります。

例:-#ls -l file * | xargs mv -t/temp

8
Ratheesh

@ 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
5
mdk

別の解決策は次のとおりです。

 for f in file_* ; do
   mv $f temp/$f
 done

欠点は、ファイルごとに新しいmvプロセスをforkすることです。