【发布时间】:2017-04-23 21:55:39
【问题描述】:
我正在尝试编写一个脚本,该脚本使用 find 和 xargs 将旧文件存档在一个大目录中。这是一行:
find /tmp/messages/ -mtime +9 -print0 | xargs -x -t -0 -n 1000 sh -c 'tar rPf /tmp/backup.tar "$@" && rm -f "$@"; sleep 1 && echo Finished one loop: $(date +"%T")'
该脚本大部分都有效,但每次命令运行 1000 个文件时它都会跳过第一个文件,我似乎无法弄清楚原因。
这是另一个示例(我尝试使用更简单的命令来看看会发生什么:
如果我只使用 echo 和 xargs,我可以有效地运行一个命令:
$ echo a b c d e f| xargs -n 2 echo "$@"
a b
c d
e f
$ echo a b c d e f| xargs -n 3 echo "$@"
a b c
d e f
另一方面,如果我每次打印每组都想睡觉,我添加 sh -c 以添加一串命令:
$ echo a b c d e f| xargs -n 2 sh -c 'echo "$@"; sleep 1;'
b
d
f
$ echo a b c d e f| xargs -n 3 sh -c 'echo "$@"; sleep 1;'
b c
e f
看看第一项是如何被跳过的?
对这里可能发生的事情有什么想法吗?
提前致谢!如果您需要任何额外的信息,请告诉我,我很乐意提供。
【问题讨论】:
-
看
-c选项,linux.die.net/man/1/bash
标签: linux bash shell find xargs