-1

我试图跟踪位于远程服务器目录中的所有文件,除了用户在命令行中作为第三个参数输入的文件。为此,我需要 grep 文件类型以避免在将 tail 的输出定向到另一个文件时造成混淆。

目录是/path/to/a/file,里面有两个文件,一个叫file.log,另一个叫file.out。我想 grep .out & .log

这是我的代码:

files=$(ssh host find /path/to/a/file -type f -name '^file')

for type in $($files | awk -F'.' '{print $2}') ; do

ssh host find . /path/to/a/file -type f ! -name "$3" | xargs 0 tail -n 20 > /destination/dir/host.$type 2>/dev/null

不幸的是,这些都不起作用,我不知道为什么。

4

2 回答 2

1

您的代码有很多错误,但最大的问题是您正在接受find应该存在于第一行的参数并将它们传递给tail最后一行。具体来说-type f ! -name "$3"

这会让你更接近。

一步一步构建脚本。写成

ssh host find ...

并确保输出正确的文件集。现在不是。

于 2013-10-18T15:05:56.830 回答
0

这个正则表达式是问题:

-name '^file'

-name不采用正则表达式,它采用 shell glob 模式。

使用它应该适合你:

ssh host find /path/to/a/file -type f -name 'file*'

更新:要从此列表中排除特定文件

ssh host find /path/to/a/file -type f \( -name 'file*' ! -name 'file.log00001' \)
于 2013-10-18T15:07:43.280 回答