我正在尝试使用脚本将超过一百万个文件从一个文件夹移动到另一个文件夹但我没有得到任何结果,即没有文件移动,我没有得到任何错误,脚本检查它们是否超过文件夹中的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
关于如何做到这一点的任何建议?
答案 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/
请注意-print0
和xargs -0
,它们允许您处理名称中包含空格的文件。
请注意,您还可以将mv
作为find
的选项运行。您可以使用以下代码来代替-print0
:
find "$src/" ... -exec mv -v "{}" /RS/2011/ \;
如果您真的想模仿xargs -t
的功能,可以通过多个-exec
命令来实现。
使用xargs
的一个好处有时是-P
选项,它允许您并行运行。乍一看,移动一百万个文件似乎是一个“大”的工作,但这很可能会让你受到IO限制,所以并行运行你的mv可能不会那么有用,哪个案例find .. -exec
可能与xargs
的管道一样高效。