我在两个目录上有日志文件,为了简单,我打算调用dir 1和dir 2.
假设用户输入位于dir1的file.log,我应该删除dir1和dir2中除file.log之外的所有文件。请有人帮帮我。
ssh host 'find /path/to/a/log -maxdepth 1 -type f -name "file*" -name "*.log" ! -name "$1" -print0 -exec tail {} \;' > /home/pl-${node}.log
ssh host 'find /path/to/a/log -maxdepth 1 -type f -name "file*" -name "*.out" ! -name "$1" -print0 -exec tail {} \;' > /home/pl-${node}.out
节点只是一个存储1和2的变量。 当我输入./test file-1.log时,输出为:
pl-1.log
Oct 21 09:15 pl-1.out
Oct 21 09:15 pl-2.log
Oct 21 09:15 pl-2.out
正如您所看到的所有文件都被拖尾一样,即使我指定file-1.log没有在参数$1
中加尾。
答案 0 :(得分:4)
以下tail
来自dir1
和dir2
的所有文件除了file.log
:
shopt -s extglob
tail -f {dir1,dir2}/!(file.log)
manual提供了有关extglob
的更多信息(可启用扩展模式匹配)。
答案 1 :(得分:0)
这样的事情应该成功:
find . -type f ! -name "*dir1/file.log" -exec tail {} \;
也就是说,使用find ... -exec tail {} \;
添加额外条件,即文件不必命名为file.log
。
如果文件的名称是参数,我怎么能使用find 命令行。例如find。 ! -type f -name“$ 1”
像这样,例如:
ssh host“find / path / to / a / log -maxdepth 1-type f -name'file * .log'! -name \“$ 1 \” - print0 -exec tail {} \;“> / home / pl - $ {node} .out
请注意,我使用的是find ".... -name \"$1\" ... "
,因为“发送”变量需要双引号。