Linux Bash脚本 – 将参数中的小写path与实际的文件系统path相匹配

我有一个Linux脚本获取传递给它的参数,源自MSDOS(实际上DOSEMU运行MS DOS 6.22)。 获得通过的参数是不区分大小写的(因为DOS没有这样做),但是当然是Linux。

我试图从以下通过的论点中获得

/media/zigg4/vol1/database/scan/stalbans/docprint/wp23452.wpd 

 /media/zigg4/vol1/Database/SCAN/STALBANS/DOCPRINT/Wp23452.WPD 

我不知道实际的区分大小写的path,所以我需要以某种方式从传递给脚本的参数中确定它。 我绝对不知道从哪里开始,所以任何帮助,不胜感激。

编辑额外的信息和清晰度

UPDATE

感谢@anubhava的回答,我使用了以下内容: –

 #!/bin/bash copies=1 if [ ! -z "$2" ]; then copies=$2 fi find / -readable -ipath $1 2>&1 | grep -v "Permission denied" | while IFS= read -r FILE; do lpr -o Collate=True -#$copies -sP $FILE done 

很好的工作:-)

您可以使用-ipath选项来find忽略大小写路径匹配:

 # assuming $arg contains path argument supplied find . -ipath "*$arg*" 

我会雇用awk (当然没有工资)

 #!/bin/bash awk -varg="$1" -vactual="/media/zigg4/vol1/Database/SCAN/STALBANS/DOCPRINT/Wp23452.WPD" 'BEGIN{ if (tolower(arg)==tolower(actual)){ printf "Argument matches actual filepath\n" } }' 

运行脚本

 ./script "/media/zigg4/vol1/database/scan/stalbans/docprint/wp23452.wpd" 

像这样的东西:

 if [ "$( echo $real | tr AZ az )" = "$lower" ]; then echo "matchy" else echo "no is matchy" fi 

一些说明:

  1. tr正在做一个更低的翻译。

  2. $( ... )位将所包含命令的结果放入一个字符串中。

  3. 如果您不确定您的“小写”字符串是否可以信任,您可以在任一方执行翻译…