我有两个不同的文件夹。
第一个包含以我的服务器名称命名的符号链接(例如:udcedpai101)。第二个包含我的服务器的清单,其中的文件以服务器名称开头并以不同的模式结尾。(这就是我使用通配符的原因)
清单文件名始终以服务器名称开头(例如:udcedpai101-print_manifest.txt
legpspai101-print_inventaire.txt、legpspai101.myhome.qc.ca-print_inventaire.txt)。但它们的结尾可以不同。
这是我正在运行的命令:
for i in `ls -l /etc/domain.conf | grep ^l | awk {'print $9'}`*; do
ls -l "/var/opt/apache/htdocs/support/print_manifest/$i*";
done
(部分)输出...
> /usr/local/coreutils/bin/ls: cannot access
> /var/opt/apache/htdocs/support/print_manifest/udcedcgi101*: No such file or directory /usr/local/coreutils/bin/ls: cannot access
> /var/opt/apache/htdocs/support/print_manifest/udcedcgi102*: No such file or directory /usr/local/coreutils/bin/ls: cannot access
> /var/opt/apache/htdocs/support/print_manifest/udcedcgi103*: No such file or directory
我尝试在命令中使用通配符 (*),但它总是返回一个错误,指出文件不存在,但即使文件存在,我也可以查看该文件:
ls -l /var/opt/apache/htdocs/support/print_manifest/udcedcgi103*
-rw-r----- 1 TOTO TOTO 69455 Mar 9 00:00 /var/opt/apache/htdocs/support/print_manifest/udcedcgi103-print_manifest.txt
非常感谢您的帮助!
答案1
您不应该解析来自ls
. 相反,请尝试以下操作:
for i in /etc/domain.conf/*; do
test -L "$i" || continue # skip if not a symlink
ls -l "/var/opt/apache/htdocs/support/print_manifest/${i%%*/}"*
done
第二个问题是星号在双引号中,因此 shell 查找的是udcedcgi101*
字面意思,而不是要扩展的通配符。
仅检索${i%%*/}
文件的基本名称,因为循环现在迭代完整路径名而不是内的相对路径/etc/domain.conf/
。
答案2
您需要将ls
循环中的第二个引号移到*
改变
ls -l "/var/opt/apache/htdocs/support/print_manifest/$i*";
到
ls -l "/var/opt/apache/htdocs/support/print_manifest/$i"*;
你可能根本不需要引号。*
双引号内有引号会阻止其扩展。