我试图将所有位于远程服务器上的目录中的文件拖尾,除了用户在命令行中输入的文件作为第三个参数。为此,我需要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
不幸的是,这一切都不起作用,我不知道为什么。
答案 0 :(得分:1)
您的代码存在很多问题,但最重要的是您在第一行中应该存在find
的参数,并在最后一行将它们传递给tail
。具体来说是-type f ! -name "$3"
那会让你更接近。
一次构建脚本一步。把它写成
ssh host find ...
并确保输出正确的文件集。现在不是。
答案 1 :(得分: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' \)