Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含wldcards和空格的Unix不区分大小写的命令行搜索_Unix - Fatal编程技术网

包含wldcards和空格的Unix不区分大小写的命令行搜索

包含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

我正试图找到一种方法,在AIX UNIX机器上远程查找符合windows中的简单标准的文件列表。它需要不区分大小写(sign),使用通配符(*),并且可能在路径中包含空格

在下面的测试中,我使用的是ksh外壳。但是,它也需要在ssh shell中工作

我正在尝试使用plink、命令行和批处理文件在Visual Basic 6(我知道)中实现安全FTP

基本上可以找到如下文件,但不区分大小写:

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;
T