如何尾随除一个以外的所有文件

时间:2013-10-17 14:29:43

标签: bash find tail

我在两个目录上有日志文件,为了简单,我打算调用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中加尾。

2 个答案:

答案 0 :(得分:4)

以下tail来自dir1dir2的所有文件除了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\" ... ",因为“发送”变量需要双引号。