Linux Bash脚本 - 将参数中的小写路径与实际文件系统路径

时间:2016-07-19 14:42:04

标签: linux bash sh case-sensitive

我有一个linux脚本,它获取一个传递给它的参数,该参数来自MSDOS(实际上是运行MS DOS 6.22的DOSEMU)。传递的参数是不区分大小写的(因为DOS没有做到这种情况),但Linux确实如此。

我试图从以下传递的参数中获取

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

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

我不知道实际区分大小写的路径,所以我需要以某种方式从传递给脚本的参数中确定它。我完全不知道从哪里开始,所以非常感谢任何帮助。

已编辑以获取更多信息和清晰度

更新

感谢@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

效果很好: - )

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

这样的事情:

if [ "$( echo $real | tr A-Z a-z )" = "$lower" ]; then 
    echo "matchy"
else
    echo "no is matchy"
fi

一些注意事项:

  1. tr正在进行降低翻译。

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

  3. 如果你不确定你的"小写"你可以在任何一方进行翻译。字符串可以信任......

答案 2 :(得分:0)

我会使用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"