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


回答:


31

OS Xの場合:

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

Linuxの場合:

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

1
Linuxでは、少なくとも/最後のオプションはオプションです。必要に応じて含めることができますが、必須ではありません。
スコット

4
@ user1953864:(-iまたは-J)トークンを指定します。トークンは単に最後に追加されるのではなく、着信引数に置き換えられます。man xargs
アマダン

14
スペースなしで言う必要があるかもしれません-i{}。または言う-I {}
スコット

1
「{}」の代わりに「%」を使用しても動作することに気付きました-%の意味と{}の意味 例:ls file_ * | xargs -I%mv%temp /
dmonopoly

3
@dmonopoly:何の意味もありません。パラメータが何であれ-i、それは置き換えられています。ls file_* | xargs -iFOO mv FOO temp/まったく同じように動作します。
アマダン

8

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

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


2
質問はfile_*、現在のディレクトリ内のファイルのみを処理したいという要望を示唆している一方で、find(追加オプションなしで)現在のディレクトリの下のディレクトリツリー全体を検索することに注意してください。
スコット

1
そうですね。これ-maxdepth 0を防ぐために追加します。

「より良い」は主観的です。より強力で、より複雑で、より低速です。また、mvファイルを一緒に処理するか個別に処理するかは関係ありませんが、他の使用方法もあります。
アマダン

編集(追加-maxdepth 0

8

mvで-t "ターゲットのディレクトリを指定"を使用すると、ファイル*を宛先ディレクトリ/ tempに移動することができます。

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


4

@ 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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.