脚本存在一些问题。
1) shebang 行缺少根 /。你有#!bin/bash
而且应该是#!/bin/bash
2)-v
grep 的选项在 - 和 v 之间有一个空格(它不应该)
3) 你实际上并没有在最后一行调用 return_content 函数——你引用了函数内部的一个变量。也许最后一行应该如下所示:
find . -name "*.txt" -type f -print0|grep -v CVS|\
xargs -0 cvs tag $( return_content )
4) 即使在修复了所有这些之后,您可能会发现 grep 会抱怨,因为 print0 正在向其传递二进制数据(由于 -print0 存在嵌入的空值),并且 grep 正在等待文本。您可以在 find 命令中使用更多参数来执行 grep 命令的功能并将 grep 删除,如下所示:
find . -type d -name CVS -prune -o -type f -name "*.txt" -print0 |\
xargs -0 cvs tag $( return_content )
find 将遍历当前目录(及以下)中的所有条目,丢弃任何名为 CVS 或以下的目录,其余的它将仅选择名为 *.txt 的文件。
我测试了该行的版本:
find . -type d -name CVS -prune -o -type f -name "*.txt" -print0 |\
xargs -t -0 echo ls -la
我在目录中创建了几个名称中带有空格和 .txt 扩展名的文件,因此脚本将显示结果:
bjb@spidy:~/junk/find$ find . -type d -name CVS -prune -o \
-type f -name "*.txt" -print0 | xargs -t -0 ls -la
ls -la ./one two.txt ./three four.txt
-rw-r--r-- 1 bjb bjb 0 Jun 27 00:44 ./one two.txt
-rw-r--r-- 1 bjb bjb 0 Jun 27 00:45 ./three four.txt
bjb@spidy:~/junk/find$
-t 参数使 xargs 显示它即将运行的命令。我使用ls -la
而不是cvs tag
- 它应该对 cvs 工作类似。