包含wldcards和空格的Unix不区分大小写的命令行搜索
我正试图找到一种方法,在AIX UNIX机器上远程查找符合windows中的简单标准的文件列表。它需要不区分大小写(sign),使用通配符(*),并且可能在路径中包含空格 在下面的测试中,我使用的是ksh外壳。但是,它也需要在ssh shell中工作 我正在尝试使用plink、命令行和批处理文件在Visual Basic 6(我知道)中实现安全FTP 基本上可以找到如下文件,但不区分大小写:包含wldcards和空格的Unix不区分大小写的命令行搜索,unix,Unix,我正试图找到一种方法,在AIX UNIX机器上远程查找符合windows中的简单标准的文件列表。它需要不区分大小写(sign),使用通配符(*),并且可能在路径中包含空格 在下面的测试中,我使用的是ksh外壳。但是,它也需要在ssh shell中工作 我正在尝试使用plink、命令行和批处理文件在Visual Basic 6(我知道)中实现安全FTP 基本上可以找到如下文件,但不区分大小写: ls -1 -d -p "/test/rick/01012017fosterYYY - Copy.txt
ls -1 -d -p "/test/rick/01012017fosterYYY - Copy.txt" | grep -v '.*/$'
谢谢你的帮助
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
在以下情况下失败:
ls:0653-341文件/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy]do
这是不存在的。
ls:0653-341文件-不存在。
ls:0653-341文件[Cc][Oo][Pp][Yy][Tt][Xx][Tt]不存在
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/[0][1][0][1][2][0][1][7][Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy][ ][-][ ][Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]?-?[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]{ }-{ }[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/*01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]* | grep -v '.*\/$'**
ls -1 -d -p "/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]" | grep -v '.*\/$'**
成功-只要没有空间
ls -1 -d -p "/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy].[Tt][Xx][Tt]" | grep -v '.*\/$'**
在以下情况下失败:
ls:0653-341文件/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][T
t] [Xx][Tt]不存在
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/[0][1][0][1][2][0][1][7][Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy][ ][-][ ][Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]?-?[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]{ }-{ }[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/*01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]* | grep -v '.*\/$'**
ls -1 -d -p "/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]" | grep -v '.*\/$'**
--假设:我们不能使用带有通配符的引号
成功。不区分大小写
ls -1 -d -p /test/rick/[0][1][0][1][2][0][1][7][Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
在以下情况下失败:
ls:0653-341文件/test/rick/[0][1][2][0][1][7][Ff][Oo][Ss][Tt][Ee][Rr
][Yy][Yy][Yy][不存在。
ls:0653-341文件][-][不存在。
ls:0653-341文件[Cc][Oo][Pp][Yy][Tt][Xx][Tt]不存在
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/[0][1][0][1][2][0][1][7][Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy][ ][-][ ][Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]?-?[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]{ }-{ }[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/*01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]* | grep -v '.*\/$'**
ls -1 -d -p "/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]" | grep -v '.*\/$'**
在以下情况下失败:
ls:0653-341文件/test/rick/[0][1][2][0][1][7][Ff][Oo][Ss][Tt][Ee][Rr
][Yy][Yy][Yy][不存在。
ls:0653-341文件][-][不存在。
ls:0653-341文件[Cc][Oo][Pp][Yy][Tt][Xx][Tt]不存在
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/[0][1][0][1][2][0][1][7][Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy][ ][-][ ][Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]?-?[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]{ }-{ }[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/*01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]* | grep -v '.*\/$'**
ls -1 -d -p "/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]" | grep -v '.*\/$'**
成功。不过也不是很有帮助
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy][ ]-[ ][Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
在以下情况下失败:
ls:0653-341文件/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][d
不存在。
ls:0653-341文件]-[不存在。
ls:0653-341文件[Cc][Oo][Pp][Yy][Tt][Xx][Tt]不存在
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/[0][1][0][1][2][0][1][7][Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy][ ][-][ ][Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]?-?[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]{ }-{ }[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/*01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]* | grep -v '.*\/$'**
ls -1 -d -p "/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]" | grep -v '.*\/$'**
在以下情况下失败:
ls:0653-341文件/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy]{d
不存在。
ls:0653-341文件}-{不存在。
ls:0653-341文件}[Cc][Oo][Pp][Yy][Tt][Xx][Tt]不存在
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/[0][1][0][1][2][0][1][7][Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy][ ][-][ ][Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]?-?[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]{ }-{ }[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/*01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]* | grep -v '.*\/$'**
ls -1 -d -p "/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]" | grep -v '.*\/$'**
失败于
ls:0653-341文件/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy]d
不存在。
ls:0653-341文件-不存在。
ls:0653-341文件[Cc][Oo][Pp][Yy][Tt][Xx][Tt]不存在
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/[0][1][0][1][2][0][1][7][Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy][ ][-][ ][Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]?-?[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]{ }-{ }[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/*01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]* | grep -v '.*\/$'**
ls -1 -d -p "/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]" | grep -v '.*\/$'**
在以下情况下失败:
ls:0653-341文件/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy]-
[Cc][Oo][Pp][Yy].[Tt][Xx][Tt]不存在。您可以使用
find
的-iname
选项来允许不区分大小写的搜索,因此对于您提供的示例,以下任何一项都可以找到您的文件:
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/[0][1][0][1][2][0][1][7][Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy][ ][-][ ][Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]?-?[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy]{ }-{ }[Cc][Oo][Pp][Yy].[Tt][Xx][Tt] | grep -v '.*\/$'**
ls -1 -d -p /test/rick/*01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]* | grep -v '.*\/$'**
ls -1 -d -p "/test/rick/01012017[Ff][Oo][Ss][Tt][Ee][Rr][Yy][Yy][Yy] - [Cc][Oo][Pp][Yy].[Tt][Xx][Tt]" | grep -v '.*\/$'**
find /test/rick -maxdepth 1 -iname '01012017fosterYYY - copy.txt'
# or
find /test/rick -maxdepth 1 -iname '01012017fosteryyy - copy.txt'
# or
find /test/rick -maxdepth 1 -iname '01012017FOSTERyyy - cOpY.txt'
:不在子目录中搜索-maxdepth 1
:允许不区分大小写的搜索-iname
ls
不进行模式匹配,任何通配符扩展(globbing)都由shell完成。glob模式语言不同于正则表达式。阅读ksh文档以了解有关globbing的信息(“手册页中的文件名生成”)
所以当你这样做的时候:
$ touch foo flo fum
$ ls -1 f[ol]o
flo
foo
。。。shell注意到全局字符[]
,读取目录内容,将其替换为匹配的文件,并将这些文件作为参数传递给ls
。您可以使用echo
来显示这一点:
$ echo f[ol]o
flo foo
ksh
具有可用于~()
构造的全局选项,选项i
为“将匹配视为不区分大小写”:
bash
有一个nocaseglob
shopt
选项:
bash$ shopt -s nocaseglob
bash$ touch fOo
bash$ echo FO*
foo
尽管需要注意的是,要想让魔法发生,需要有一些球形人物在场:
bash$ echo FOO
FOO
bash$ echo [F]OO
foo
(要使此选项保持本地更改,请参见)
看起来您正在使用
grep-v'.*/$'
删除作为目录的行。*
在这里是多余的--grep-v'/$”
是等价的
但是find
对于这种搜索和过滤来说是一个更好的工具,它通过实际查看文件属性而不是解析列表中的一点ASCII来实现-type f
(匹配常规文件)
$ touch foo FOO FoO
$ mkdir fOo
$ find . -maxdepth 1 -type f -iname "foo"
./FOO
./foo
./FoO
对于不区分大小写的通配符搜索,当-maxdepth和-iname标志不可用于AIX Find时,可以将查找结果传递给Grep:
find /test/rick/. \( ! -name . -prune \) -type f -print | grep -i ".*foster.*\.txt"
查找[InThisFolder][ExcludeSubfolders][FileTypes]| grep[InsensitiveWildcardName]
尽管如此,如果您有一个像“/test/rick/rick/”这样的文件夹结构,这仍然会有问题
以下代码使用当前目录符号“”给出结果:
但您可以将结果传递给sed并查找“/。/”并替换为“/”
*更新*
基于此页面:
我提出了以下命令(用于文件扩展上的循环或globbing),它避免了上面的find | grep解决方案中出现问题的“/test/rick/rick/”文件夹结构。它从任何文件夹中搜索文件夹,处理空格和大小写不敏感,而不必指定转义字符或上/下匹配([Aa])
只需修改searchfolder和searchpattern:
searchfolder="/test/rick"; searchpattern="*foster*.txt"; for file in "$searchfolder"/*.*; do [[ -e "$file" ]] || continue; if [[ "$(basename "$file" | tr '[:upper:]' '[:lower:]')" = $searchpattern ]]; then echo "$file"; fi; done
它是这样做的:
- 设置要搜索的文件夹路径(
)searchfolder=“/test/rick”
- 设置搜索模式(
)searchpattern=“*foster*.txt”
- 循环搜索文件夹中的每个文件(“$searchfolder”/*.*;中的文件)
- 确保文件存在(
)[-e“$file”]| | continue;
- 将任何基本文件名的大写字符转换为小写(
)basename“$file”| tr'[:upper:''[:lower:''”
- 测试降低的基本文件名是否与搜索模式匹配,如果匹配
然后打印完整路径和文件名(
)if[[$(basename“$file”| tr “[:上限:”[:下限:”)=$searchpattern]];然后回显“$file”;fi;