如何在 Linux 上使用 xargs 移动文件?

25 linux xargs mv

我正在尝试这个,但它不起作用:

ls file_* | xargs mv {} temp/
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Ama*_*dan 33

在 OS X 上:

ls file_* | xargs -J {} mv {} temp/
Run Code Online (Sandbox Code Playgroud)

在 Linux 上:

ls file_* | xargs -i {} mv {} temp/
Run Code Online (Sandbox Code Playgroud)

  • 你_可能_需要说`-i{}`,没有空格。或者说`-I {}`。 (17认同)
  • @user1953864:`-i`(或`-J`)指定一个将被传入参数替换的标记,而不是将它们添加到末尾。`人xargs` (5认同)
  • @dmonopoly:他们不*意味着*任何东西。无论`-i` 的参数是什么,它都会被替换。`ls 文件_* | xargs -iFOO mv FOO temp/` 的工作原理完全相同。 (3认同)

小智 9

在 mv 使用 -t“指定目标目录”,它应该可以将文件*移动到目标目录 /temp

例如:- #ls -l 文件* | xargs mv -t /temp


小智 8

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

findls可能有比 shell 允许的程序参数数量更多的文件更好。

  • 请注意,该问题表明希望仅处理当前目录中的 `file_*` 文件,而 `find`(没有附加选项)将搜索当前目录下的整个目录树。 (2认同)

小智 5

正如@user1953864 所建议的: { -i, -J} 指定将被传入参数替换的标记。

例如ls

something.java  exampleModel.java  NewsQueryImpl.java  readme someDirectory/
Run Code Online (Sandbox Code Playgroud)

然后将所有 java 文件移动到 someDirectory 文件夹中,xargs如下所示:

在 Linux 上

ls *.java | xargs -i mv {} someDirectory/
Run Code Online (Sandbox Code Playgroud)

在 MacOS 上

ls *.java | xargs -J mv {} someDirectory
Run Code Online (Sandbox Code Playgroud)