WAF*_*WAF 3 bash shell-script wildcards for
我想对几束文件中的每一束执行相同的聚合操作,其中每一束都与一个 glob 模式匹配。我不想做的是将每个文件名分别通过管道传输到聚合函数中。
我的第一次尝试失败了,因为文件名在外循环中被打乱,将整个集合展平为一个平面列表,而不是将它们视为单独的批次:
for fileglob in /path/to/bunch*1 /path/to/bunch*2 ... ; do
stat "$fileglob" | awk [aggregation]
done
Run Code Online (Sandbox Code Playgroud)
所以我*
通过转义它从循环中隐藏了它,然后为函数取消了它:
for fileglob in /path/to/bunch*1 /path/to/bunch*2 ... ; do
realglob=`echo "$fileglob" | sed 's/\\//g'`
stat "$realglob" | awk [aggregation]
done
Run Code Online (Sandbox Code Playgroud)
一定有更好的方法。它是什么?
GNU bash,版本 3.2.51
小智 6
这需要谨慎使用引号:
for fileglob in '/path/to/bunch*1' '/path/to/bunch*2' ... ; do
stat $fileglob | awk [aggregation]
done
Run Code Online (Sandbox Code Playgroud)
但是对于带有空格(或换行符)的文件名,这可能会失败。最好使用这个:
fileglobs=("/path/to/bunch*1" "/path/to/bunch*2")
for aglob in "${fileglobs[@]}" ; do
set -- $aglob
stat "$@" | awk [aggregation]
done
Run Code Online (Sandbox Code Playgroud)
glob 被正确扩展并放置在位置参数中:
set -- $aglob
Run Code Online (Sandbox Code Playgroud)
然后,将每个参数作为参数放置到stat
in:
stat "$@"
Run Code Online (Sandbox Code Playgroud)
并且输出stat
(作为一个输出)到awk
.
归档时间: |
|
查看次数: |
643 次 |
最近记录: |