Bash Shell查找文件时不区分大小写

Bash Shell查找文件时不区分大小写,有些 MP3 文件的扩展名是 .MP3,而不是 .mp3。查找时该如何兼顾两者?

解决方案

-iname 谓词(如果使用的 find 版本支持)执行不区分大小写的搜索。例如:

find . -follow -iname '*.mp3' -print0 | xargs -i -0 mv '{}' ~/songs

讨论

有时你在意文件名的大小写,有时则不在意。对于后者,可以使用 -iname 选项,也就是说,在这种情况下,.mp3.MP3 都表明该文件可能是 MP3 文件。(之所以说“可能”,是因为在类 Unix 系统中,你可以随意命名文件,并不强制使用某种扩展名。)

与 Microsoft Windows 兼容的文件系统打交道时,最容易出现大小写问题,尤其是那些陈旧的或“最低标准的”(lowest common denominator)文件系统。数码相机中的文件名类似于 PICT001.JPG,数字随照片递增。如果尝试:

find . -name '*.jpg' -print

这个命令找不到太多照片。你也可以试试:

find . -name '*.[Jj][Pp][Gg]' -print

该模式能够匹配方括号中的任一字母,但就是不太好输入,尤其要匹配的模式比较长时。在实践中,-iname 用起来更加简单。要注意的是,并非所有的 find 版本都支持 -iname。如果你所在的系统不支持,那就只能依靠 -name 配合难懂的模式匹配了,或者安装 GNU 版本的 find。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!