通过查找和grep减少列表后的tar文件?

通过查找和grep减少列表后的tar文件?,grep,find,tar,Grep,Find,Tar,我已经制定了这个命令,给我一个要发送到tar的文件列表,如何将这个列表发送到tar find . -not -type l | grep -E "(^\.\/bin\/custom|^\.\/config\/local)" | grep -v -E "(.settings|.classpath|.external)" 我想保留bin/custom和config/local的层次结构* 我不想要任何其他文件(有很多),bin/custom是一个目录,config/local*是config中的文

我已经制定了这个命令,给我一个要发送到tar的文件列表,如何将这个列表发送到tar

find . -not -type l | grep -E "(^\.\/bin\/custom|^\.\/config\/local)" | grep -v -E "(.settings|.classpath|.external)"
  • 我想保留bin/custom和config/local的层次结构*
  • 我不想要任何其他文件(有很多),bin/custom是一个目录,config/local*是config中的文件
  • 我不想要任何符号链接
  • 我想排除一些隐藏文件(.settings |.classpath |.external)

  • 您可以使用如下构造:

    tar cvf tarfile.tar $(find . -type f | grep -E "(^\.\/bin\/custom|^\.\/config\/local)" | grep -v -E "(.settings|.classpath|.external)")
    
    您只需提供要添加到tar归档中的文件列表

    它不需要使用
    -not-type l
    -type f
    只提供文件(而不提供链接) 如果有许多类似的文件,则可以解决此问题:

    find . -type f | grep -E "(^\.\/bin\/custom|^\.\/config\/local)" | grep -v -E "(.settings|.classpath|.external)"|xargs tar cvf tarfile.tar
    

    所以这一点最初是有效的,但我尝试再次使用它,我得到了一个错误:zsh:参数列表太长:tar我假设这意味着有太多的文件,有任何解决这个问题的建议吗?谢谢你的完美回答,更重要的是,一个超快速的答复。我真的很感激!