我想执行相反的:
find . -name "*2013*"
Run Code Online (Sandbox Code Playgroud)
查找当前目录中名称中不包含字符串“2013”的所有文件。我怎样才能做到这一点?
Sté*_*las 39
简单地:
find . ! -name '*2013*'
Run Code Online (Sandbox Code Playgroud)
添加! -type d也排除类型的文件目录下(如.本身),或-type f只包括普通文件,排除所有其他类型的文件(目录,FIFO的符号链接,设备,插座...)。
但是要注意*匹配 0 个或多个字符的序列。因此,它可以报告包含文件名2013,如果是2013在之前或之后的东西,不能完全解码为当前区域设置有效的字符。
如果您所在的语言环境中的字符可以用多个字节(如 UTF-8)编码,文件名以不同的编码进行编码,则可能会发生这种情况。例如,在 UTF-8 语言环境中,Stéphane2013如果文件é已在 iso8859-15 字符集(如 0xe9 字节)中编码,它会报告文件。
最好是确保文件名在语言环境的字符集中编码,但如果你不能保证,解决方法是find在 C 语言环境中运行:
LC_ALL=C find . ! -name '*2013*'
Run Code Online (Sandbox Code Playgroud)