在文件夹之间移动文件不起作用

时间:2017-12-04 13:01:35

标签: linux bash shell

我正在尝试使用脚本将超过一百万个文件从一个文件夹移动到另一个文件夹但我没有得到任何结果,即没有文件移动,我没有得到任何错误,脚本检查它们是否超过文件夹中的20条记录,它将它们移动到另一个指定的文件夹中,这是我的脚本。

#!/bin/bash

cd "/home/admin/Lulu/Bo/"

check="ls | wc -l"
if [ $(check) -gt 1 ]
then
   find ./ -name " oAS1_201613*.tar.gz"|grep -v bak| xargs -t -I {} mv {} /RS/2011/
fi

关于如何做到这一点的任何建议?

1 个答案:

答案 0 :(得分:3)

找不到文件的一个可能原因可能是您指定的文件名不正确。您的文件确实是否以 space 字符开头?

你是否有理由对这些物品进行计数?与find条件匹配的文件是否存在意味着$(check) -gt 1?如果是这样,您可以取消检查 - find如果看不到匹配的文件,则不会执行任何操作。

#!/bin/bash

src="/home/admin/Lulu/Bo/"

find "$src/" \
  -type f
  -name "oAS1_201613*.tar.gz" \
  -not -name "*bak*" \
  -print0 |
xargs -0 -t -I {} mv "{}" /RS/2011/

请注意-print0xargs -0,它们允许您处理名称中包含空格的文件。

请注意,您还可以将mv作为find的选项运行。您可以使用以下代码来代替-print0

find "$src/" ... -exec mv -v "{}" /RS/2011/ \;

如果您真的想模仿xargs -t的功能,可以通过多个-exec命令来实现。

使用xargs的一个好处有时是-P选项,它允许您并行运行。乍一看,移动一百万个文件似乎是一个“大”的工作,但这很可能会让你受到IO限制,所以并行运行你的mv可能不会那么有用,哪个案例find .. -exec可能与xargs的管道一样高效。